![](/img/trans.png)
[英]How would I call a function in javascript, and then later, on a scroll event, call that specific instance of the function?
[英]How would I cancel a specific event in javascript?
我在on
方法中添加了 2 个不同的事件,每个事件都称为touchstart
和mousedown
,如下所示:
this.$el.on('touchstart mousedown', (e) => { this.start(e); })
我的主要目标是取消了mousedown
唯一的事件属于on
在所谓的最终方法end
的功能。
如果我运行touchstart
事件,2 个不同的事件总是一起触发。 看这张图:
此问题会导致 Firefox 出现意外事件阻止。 而且代码运行两次,这是不必要的。 我想在click
或touch
元素时重定向网站,在drag
或swipe
时阻止。
我在谷歌上搜索了如何防止特定事件,但没有找到任何信息,所以我自己尝试了几种方法。 然而,所有的案例都没有奏效。
添加return false;
线
return false
会在end
函数结束后停止所有剩余的事件。 我的目标是仅取消mousedown
,而不是整个events
。 因此,我不能只是将行放入函数中。 在off
方法中添加mousedown
事件
off
方法的events
它off
仍然保留。 因此,如果我在滑动元素后尝试拖动,则不会发生任何事情,因为mousedown
事件现在已关闭。 添加preventDefault()
或stopPropagation()
使用RegExp
为 Firefox 分离并创建一个新函数
有没有办法取消此代码中的特定event
?
class Evt { constructor($el) { this.$el = $el; } start(e) { console.log('start Function'); this.$el.off('click'); this.$el.on({ ['touchmove mousemove']: (e) => this.eventmove(e), ['touchend mouseup']: (e) => this.end(e) }); } eventmove(e) { e.preventDefault(); console.log('move function'); this.$el.on('click', (e) => {e.preventDefault();}); return false; } end(e) { console.log('end function'); this.$el.on('click'); this.$el.off('touchmove touchend mousemove mouseup'); } apply() { this.$el.on('touchstart mousedown', (e) => { this.start(e); }) } } var thatEvt = new Evt($('#link')); thatEvt.apply();
a { width: 100%; height: 200px; border-radius: 10px; background-color: brown; font-family: Helvetica; }
<a id="link" href="https://google.co.uk"> Click/Touch and Drag/Swipe </a> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
据我所知,您的目的是在单击内移动鼠标时不重定向链接。
首先,我假设您不希望链接可拖动,因此添加draggable="false"
标签。 这将防止可能影响您发送的内容之外的代码的事件(例如重定向/删除链接)。
<a id="link" href="https://google.co.uk" draggable="false">
Click/Touch and Drag/Swipe
</a>
如果这不能解决您的问题,我将下面的代码放在一起,它可能更复杂,但应该更健壮一些。
class Evt {
constructor($el) {
this.$el = $el;
this.active = false;
this.preventRedirect = false;
}
start(e) {
console.log('start Function');
this.active = true;
this.preventRedirect = false;
}
eventmove(e) {
if (this.active) {
console.log('move function');
this.preventRedirect = true;
}
}
end(e) {
if (this.active) {
console.log('end function');
this.active = false;
}
}
apply() {
this.$el.on({
['touchstart mousedown']: (e) => this.start(e),
['click']: (e) => { //preventing onclick only if preventRedirect is set
if (this.preventRedirect) {
e.preventDefault();
return false;
}
}
});
$("html").on({ //so that the mouse can move outside the element and still work.
['touchmove mousemove']: (e) => this.eventmove(e),
['touchend mouseup']: (e) => this.end(e)
});
}
}
var thatEvt = new Evt($('#link'));
thatEvt.apply();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.