在有条件的情况下收听鼠标事件

时间:2017-06-12 11:25:01

标签: javascript html mouseevent addeventlistener

我想"听"仅在单击复选框时才显示鼠标事件。因此,我有以下代码:

HTML

<input type="checkbox" id="magicLens" onchange="magicLens()">
<label for="magicLens">Magic Lens</label>

JS

function magicLens(){
  const magicLens_checked = document.getElementById('magicLens').checked;

  if (magicLens_checked === true){
      canvas.addEventListener('mousemove', e => {
         myAnonymous = arguments.callee;
         ...
         // draw something at the current mouse position
         // and therefore use the 'e' event object
    });
  }
  else {
      canvas.removeEventListener('mousemove', myAnonymous);
  }
}

问题是,未选中复选框时(false)也会出现绘图(镜头)。我甚至不确定removeEventListener()是否是处理它的正确方法(虽然我已经尝试了没有它的整个事情,结果是相同的)。

也许你有更好的想法来描述标题中的问题。随意编辑!

2 个答案:

答案 0 :(得分:0)

实际上总是更容易听取事件并在那里检查是否选中了复选框。

const canvas = document.getElementById('canvas');

canvas.addEventListener('mousemove', e => {
    const magicLens_checked = document.getElementById('magicLens').checked;

    if (!magicLens_checked) {
        return;
    }

    // Do something with e
    console.log(e);
});

您可以在此Fiddle中查看。 (我将事件监听器添加到文档中,以避免创建任意画布,但它的工作方式相同)

答案 1 :(得分:0)

Javascript引擎将传递给addEventListener和removeEventListener的内容视为两个不同的函数,这就是removeEventListener无法正常工作的原因。在这些之外创建一个命名函数并将其传递给它们。