点击对象不会被注册

时间:2018-05-18 13:44:21

标签: javascript fabricjs

我无法找到我做错的事情,因为当我点击画布上的三角形对象时,e.target的值为false。对于其他类型的对象(线条,圆圈......)"对象名称"得到它的价值。

canvas.on('mouse:down', function(e) {
    if (e.target) {
        objectname = e.target.name;
    }
});

我必须检查什么或者你可以请求我如何继续调试这个错误?

我有一个怀疑" selectable = false;"或" deactivateAll();"可能是造成这种麻烦的原因,我进行了文本搜索,但没有任何结果出来。

接下来是一张物体照片。我可以点击除三角形以外的任何对象,我将获得对象的名称。  objects on canvas

我不需要新的代码,它会让我在画布上找到对象的名称。我的代码片段适用于除三角形以外的所有对象。这是我对三角形对象的代码造成了一些混淆。现在鼠标:当我点击三角形时,注册没有注册。我无法调试这个。 这就是问题所在。

我会以其他方式询问,我必须做些什么来防止鼠标:点击特定对象时要触发的事件?

因为很明显我用三角形做了,因为现在我遇到了这个问题。

接下来是一个更好的例子。

 canvas.on('mouse:down', function(e) {
         if (e.target) {
               console.log('e.target is: '+e.target.type);
         }else {console.log('e.target is null ';}
    }

点击除三角形以外的任何对象,我得到e.target.type。 我确实检查了对象[i]的所有对象。可选择,并且在所有情况下都确实如此(即使对于三角形)。

2 个答案:

答案 0 :(得分:1)

假设您使用jQuery是因为.on()函数,您可以通过这种方式获取画布的name,将点击与.on('click', function(){...}

绑定在一起

var canvas = $('#myCanvas');
canvas.on('click', function(e) {      
   if (e.target) {    
          objectname = $(e.target).attr('name');
          console.log(objectname);
   }
});
canvas{
  border: 1px solid black;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="myCanvas" name="This is my canvas"></canvas>

答案 1 :(得分:0)

以下是普通JavaScript中的答案:

// Initialize a compatibility test
var compatibilityTest = EventTarget.prototype.addEventListener;

// Update the test
compatibilityTest = (
    typeof compatibilityTest == 'function' &&
    compatibilityTest.toString().indexOf('[native function]') > -1
);

// Compatible function for legacy and modern browsers
function setEvent() {
    var args = [... arguments].slice(1),
        element = arguments[0];

    EventTarget.prototype[
        compatibilityTest ? 'addEventListener' : 'attachEvent'
    ].apply(
        element,
        ((compatibilityTest ? '' : 'on') + String(args[0])].concat(args.slice(1))
    )
}

// Set the event
setEvent(canvas, 'click', function listener(event) { /* Do something... */ })