当我按住鼠标按钮移动鼠标时,Fabric.js–元素是未定义的

Fabric.js – element is undefined when I move the mouse holding down the mouse button

本文关键字:鼠标 元素 js 未定义 Fabric 按钮 移动      更新时间:2023-09-26

我有一个由许多不透明度为0的圆环组成的画布。我想在I:时将其更改为1

  1. 单击圆
  2. 当鼠标按钮按下时(用光标)在圆圈上移动

Nr 1很容易。这个问题可以用画布来解决

但我不知道该如何解决第二个问题。以下是我的代码中的一些片段:

var mouseDown = 0;
document.body.onmousedown = function() { 
    mouseDown = 1;
}
document.body.onmouseup = function() {
    mouseDown = 0;
}
canvas.on('mouse:move', function(options) {
    if (mouseDown  && options.target) {
        options.target.set('opacity', 1)
        canvas.renderAll()
}});

但是当按下鼠标按钮时,选项.target始终未定义

Object {target: undefined, e: MouseEvent}

我在FabricJS中使用typescript,遇到了同样的问题。我发现你可以使用canvas.findTarget方法让FabricJS为你做这件事。我相信您可以将其转换为相应的javascript。

canvas.on('mouse:move', (e) => {
  var target = canvas.findTarget(<MouseEvent>(e.e), true);
}

我对Fabric.js不是很熟悉,所以可能有更好的解决方案,但我的看法是:

canvas.on('mouse:move',function(options){
    var pt = { x: options.e.clientX, y: options.e.clientY };
    if( circle.containsPoint(pt)  ) {
        if( !circle.mouseOver ) {
            circle.mouseOver = true;
            console.log( 'over circle, yo' );
            circle.set('opacity', 0.5);
            canvas.renderAll();
        }
    } else if( circle.mouseOver ) {
        circle.mouseOver = false;
        circle.set('opacity', 1.0);
        canvas.renderAll();
    }
});

基本上,我们要做所有繁重的工作,看看我们是否在感兴趣的对象上,并在第一次鼠标悬停在它上面时更改它的属性,然后在鼠标离开它时再次更改。您可以将其与mouseDown变量结合起来,只在鼠标放下时执行这些操作。

你可以在这里看到我的解决方案:

http://jsfiddle.net/qwpB3/

相关文章: