我无法找到我做错的事情,因为当我点击画布上的三角形对象时,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]的所有对象。可选择,并且在所有情况下都确实如此(即使对于三角形)。
答案 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... */ })