使用 ES6 类(无 jQuery)
要在没有 jQuery 帮助的情况下在 javascript 中实现这一点,您可以添加和删除事件处理程序。
首先创建将添加和删除表单事件侦听器的函数
flagged () {
this.isScrolled = true;
}
这会停止一个事件的所有事件
preventClick (event) {
event.preventDefault();
event.stopImmediatePropagation();
}
然后在mousedown和mousemove事件依次触发时添加标志。
element.addEventListener('mousedown', () => {
element.addEventListener('mousemove', flagged);
});
请记住在鼠标上移时将其移除,这样我们就不会在此元素上重复出现大量事件。
element.addEventListener('mouseup', () => {
element.removeEventListener('mousemove', flagged);
});
最后在我们元素的mouseup 事件中,我们可以使用标志逻辑来添加和删除点击。
element.addEventListener('mouseup', (e) => {
if (this.isScrolled) {
e.target.addEventListener('click', preventClick);
} else {
e.target.removeEventListener('click', preventClick);
}
this.isScrolled = false;
element.removeEventListener('mousemove', flagged);
});
在上面的示例中,我定位的是被点击的真实目标,所以如果这是一个滑块,我将定位图像而不是主画廊element。要定位主要的element,只需像这样更改添加/删除事件侦听器。
element.addEventListener('mouseup', (e) => {
if (this.isScrolled) {
element.addEventListener('click', preventClick);
} else {
element.removeEventListener('click', preventClick);
}
this.isScrolled = false;
element.removeEventListener('mousemove', flagged);
});
结论
通过将匿名函数设置为 const,我们不必绑定它们。同样通过这种方式,它们有一个“句柄”,允许 s 从事件中删除特定函数,而不是事件中的整个函数集。