分离并重新附加鼠标滚轮事件侦听器不会重置滚动惯性
Detach and re-attach mousewheel event listener don't reset scroll inertia
我正在使用jquery-mousewheel插件来触发一个函数。
当我调用 moveit 时,我会分离侦听器并等待动画完成,然后重新附加侦听器。
问题是当我重新连接它时,鼠标滚轮插件仍然在监听某些鼠标/触控板的惯性,并反复调用 moveit。
我想在我的特定情况下,去抖动或限制函数调用不是好的解决方案,因为惯性仍然存在,并且我还希望立即附加侦听器以进行其他可能的 moveit 调用。
有没有办法通过完全重置鼠标滚轮事件而不是仅仅分离它来"杀死惯性"?
$(document).ready(function () {
var tween;
var slide = $('#slide');
function bodyListen () {
$('body').on('mousewheel.bodyscroll',
function (e, delta, deltaX, deltaY) {
e.preventDefault();
$('body').off('mousewheel.bodyscroll');
moveit();
});
}
function moveit () {
tween = TweenMax.to(slide, 0.8, {
marginLeft: 300,
onComplete: bodyListen
});
}
bodyListen();
});
在处理事件(或与 DOM 相关的任何操作)时使用标志,因为事件侦听器通常可以像异步函数一样运行。
$(document).ready(function () {
var tween;
var slide = $('#slide');
var flag = true;
function bodyListen () {
$('body').on('mousewheel.bodyscroll',
function (e, delta, deltaX, deltaY) {
if(flag){
e.preventDefault();
flag = false;
moveit();
}
});
}
function moveit () {
tween = TweenMax.to(slide, 0.8, {
marginLeft: 300,
onComplete: function(){
flag = true;
}
});
}
bodyListen();
});
虽然我自己没有尝试过,但 TweenMax 有 杀死补间 和 杀死所有 允许您杀死补间并选择性地在你这样做之前完成它们。 也许不是你想要的,因为它会强制动画完成,但它会让你回到你想要的状态,并且代码插入很简单。在函数体的开头听
function bodyListen() {
if(tween) tween.killAll(true)
.....
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 事件侦听器 / CSS 伪类出现时滚动条
- 在 iFrame 中滚动事件侦听器在 iOS 上不起作用
- 在屏幕顶部附近滚动元素时触发的侦听器
- 仅将侦听器应用于具有 AJAX 无限滚动的新项
- 分离并重新附加鼠标滚轮事件侦听器不会重置滚动惯性
- HTML 5 画布滚动事件侦听器不起作用
- 暂时禁用滚动事件侦听器
- 如何在第一次触发后停止滚动事件侦听器
- 是否有一个javascript事件侦听器只在用户向上滚动时检测,或者只在用户向下滚动时检测