我正在尝试使用Javascript自己的颜色拾取器轮,我希望能够通过拖动一个小圆圈(内部带有“+”符号)来选择颜色)或通过点击轮子上的某处(不拖动小圆圈,但小圆圈必须到达该位置)。另外,我希望能够在按下轮子上的某个位置(当触发mousedown事件时)之后拖动小圆圈,直到释放鼠标按钮(mouseup)。RemoveEventListener在另一个内部添加EventListener时不起作用
的位置:它是在这里看到了我想要在视觉上容易得多: https://jsfiddle.net/s1qesLp9/1/
如果您取消注释行78,然后就可以看到的问题是什么。
问题是,当我使用添加和删除eventListeners(因为我想要完成上述操作,我使用mousedown,mousemove和mouseup)我得到这样的警报数量为每mousedown增加1在车轮上(我只需要一个警戒,独立于车轮上的多少mousedowns!)。我在想如果它与文档对象有关,或者如果删除eventListeners有问题,但我不确定。
这里来,我有问题的一部分:
document.getElementById('wheel').addEventListener('mousedown', function(e) {
targetMove(e);
document.addEventListener('mousemove', targetMove);
document.addEventListener('mouseup', function() {
document.removeEventListener('mousemove', targetMove);
document.onmouseup = null;
alert("Here is the problem: For every mousedown on the wheel, the
number of alerts is increased by 1 (I only want one alert here!)");
});
}, false);
我不太清楚你设置标志的意思。是否也可以用代码显示,因为那样会更容易理解。随意更改提供的代码中的代码:)你说我永远不会删除监听器到mouseup,我不会删除监听器(mouseup和mousemove)通过函数()中的以下代码: document.removeEventListener('mousemove ',targetMove); document.onmouseup = null; – amarillo
就我而言,删除侦听器可以通过:document.onmouseup = null或document.removeEventListener('mouseup',targetMove)来完成。我已经尝试过没有任何解决方案,一切工作,因为它应该。 – amarillo