【问题标题】:Fabric JS How to call a function from another functionFabric JS如何从另一个函数调用一个函数
【发布时间】:2020-11-17 12:00:49
【问题描述】:

我有一个功能可以在单击图像时隐藏和显示图像,但我想通过单击另一个对象来做同样的事情。

这是图片的代码


    function drawCheckbox(left, top, 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 = top;
            img.set({
                hoverCursor: 'default',
                selectable: true,
                opacity: 0
    
            })
            img.on('mousedown', function(e) {
                if(e.target.opacity <= 0.5){
                    e.target.opacity = 1;
                }else{
                    e.target.opacity = 0;
                }
                canvas.renderAll();
    
            });
            canvas.add(img);
            canvas.renderAll();
    
        })
    }

这是矩形对象的代码:


    function addRect(left, top, width, height, id) {
        const o = new fabric.Rect({
            width: width,
            height: height,
            fill: tableFill,
            stroke: tableStroke,
            strokeWidth: 2,
            shadow: tableShadow,
            originX: 'center',
            originY: 'center',
            centeredRotation: true,
            snapAngle: 45,
            selectable: true
        })
    
        const t = new fabric.IText(number.toString(), {
            fontFamily: 'Calibri',
            fontSize: 14,
            fill: '#fff',
            textAlign: 'center',
            originX: 'center',
            originY: 'center'
        })
        const g = new fabric.Group([o, t], {
            left: left,
            top: top,
            centeredRotation: true,
            snapAngle: 45,
            selectable: true,
            type: 'table',
            id: id,
            number: number
        })
        canvas.add(g)
        number++
        g.on('selected', function () {
               // here I want to make de image dissapear, when the object is clicked
        })
    
        canvas.hoverCursor = 'pointer';
        canvas.discardActiveObject();
        canvas.renderAll();
        return g;
    }

我尝试在矩形内创建图像,但单击矩形时它没有做任何事情。有没有人遇到过类似的问题?

这里是代码笔:codepen.io/Zerro1/pen/PoZvmOE。

【问题讨论】:

  • 能否请您为其创建代码笔?
  • 这里是代码笔:codepen.io/Zerro1/pen/PoZvmOE。我需要创建另一个对象(矩形或类似的东西),当我单击矩形时,我想将复选框图像设置为不透明度 0。
  • 我可以看到点击图像对象切换可见性,现在点击哪个对象来实现相同的效果?
  • 在一个新对象上(我尝试在其中放置一个矩形对象,但由于某种原因它没有在 codepen 中显示)。我需要一个新的矩形,通过单击它,将一个图像设置为不透明度 0。
  • 或者我怎样才能在那个 codepen 中创建 2 个单独的函数?一个用于设置不透明度,一个用于创建该图像。如果功能分开,我会知道如何从那里解决它。

标签: javascript html css fabricjs


【解决方案1】:

在这里,我为您创建了一个codepen,这是一种方法。我尝试创建一个正方形并单击该正方形,我正在切换最后一个复选框的可见性。

部分代码:

var square = new fabric.Rect({ 
        width: 100, 
        height: 100, 
        fill: '#000',
         left:120
    });
    square.on('mousedown', function(e) {
    if(img.opacity <= 0.5){
    img.opacity = 1;
    }else{
    img.opacity = 0;
    }
    canvas.renderAll();

    });
    canvas.add(img);
    canvas.add(square); 
    canvas.renderAll();

【讨论】:

  • 感谢您的回答!有什么办法可以使功能分开吗?我的意思是一个用于图像的功能,一个用于正方形,一个用于设置图像的不透明度。这可能吗?
  • 是的,为什么不呢。你也可以那样做。请通过相同的codepen.io/technotech/pen/JjGqNmK 链接,我为这些创建了单独的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2015-07-03
  • 2019-02-17
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多