【问题标题】:Create checkbox mecanism with Fabric JS使用 Fabric JS 创建复选框机制
【发布时间】:2020-11-09 00:59:07
【问题描述】:

如何使用 Fabric JS 创建一个类似于复选框的组件?更像是点击图片,设置不透明度为0。如果再次点击,设置不透明度为1。

这是我的代码:

对于复选框图像:

fabric.Image.fromURL('https://image.flaticon.com/icons/svg/33/33281.svg', (image) => {
    image.scale(0.35);
    image.set({
        left: 152,
        top: 120,
        hoverCursor: 'default',
        selectable: true,
        opacity: 0.5,
        hasControls: false,
        lockMovementX: true,
        lockMovementY: true

    })
    if(image.onselect === true ) {
        image.set().opacity = 0;
    }
    canvas.add(image);
});

放图片的盒子:

function addBox(left, top, width, height) {
    const o = new fabric.Rect({
        left: left,
        top: top,
        width: 30,
        height: 30,
        fill: boxFill,
        strokeWidth: 2,
        originX: 'left',
        originY: 'top',
        centeredRotation: true,
        snapAngle: 45,
        selectable: true,
        type: 'box',
        id: generateId()
    })
    
    if(image.onselect === true ) {
        image.set().opacity = 0;
    }
     
    canvas.add(o)
    canvas.getObjects().map(o => {
        o.hasControls = false
        o.lockMovementX = true
        o.lockMovementY = true

        o.borderColor = '#38A62E'
        o.borderScaleFactor = 2.5
    })
    canvas.selection = false
    canvas.hoverCursor = 'pointer'
    canvas.discardActiveObject()
    canvas.renderAll()
    return o
}

我该如何解决这个问题?有没有办法让图像在您单击时出现和消失(使用不透明度或类似的东西)?

【问题讨论】:

    标签: javascript html css fabricjs


    【解决方案1】:

    希望这对您和许多想要在对象上添加事件的人有所帮助。

    var canvas = new fabric.Canvas("canvas");
    
    function drawCheckbox(left,right, width, height){
        var imgClass = new fabric.Image.fromURL('https://image.flaticon.com/icons/svg/33/33281.svg',function(img){
    
        img.width = width; 
        img.height = height; 
        img.left = left; 
        img.top = right; 
        img.hasControls = false
    
        img.on('mousedown', function(e) {
        if(e.target.opacity <= 0.5){
        e.target.opacity = 1;
        }else{
        e.target.opacity = 0.4;
        }
        canvas.renderAll();
    
        });
        canvas.add(img);
        canvas.renderAll();
    
      })
      }
      
      drawCheckbox(0,0, 100,100)
      drawCheckbox(100,100, 100,100)
      drawCheckbox(200,200, 100,100)
    body {
        background-color:silver;
    }
    canvas {
        border:1px solid red;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.3/fabric.min.js"> </script>
    
    <canvas id="canvas" width=300 height=300></canvas><br>

    【讨论】:

    • 感谢您的回答!有没有办法在参数内而不是在函数内改变图像的位置?
    • 你的意思是mousedown事件的参数吗?或者你想用参数化函数创建一个完整的复选框图像?
    • 具有参数化功能的完整复选框图像。
    • 答案已更新,请检查您是否期望相同。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多