确定用户滚动与JavaScript滚动顶部更改

确定用户滚动与JavaScript滚动顶部更改,javascript,Javascript,如何确定滚动事件是由我自己的动画引起的,还是由用户的滚动引起的 我有一个可滚动的区域,它就像一个CV控制旋钮,用户可以在其中滚动并直接映射到DOM元素的大小、左侧和顶部 如果一个滚动事件在特定边界内结束,我想“捕捉”到附近的位置,用一个颗粒的tween来修改同一个可滚动区域的滚动顶部 在进行此转换时,我希望任何用户滚动以立即覆盖动画,以便用户重新获得控制权 我觉得我离解决方案很近了,我注意到我的用例涉及浮点增量,用户滚动只会增加整数。我不确定这是否有用,这感觉像是一个黑客滥用,但我真的在寻找

如何确定滚动事件是由我自己的动画引起的,还是由用户的滚动引起的


我有一个可滚动的区域,它就像一个CV控制旋钮,用户可以在其中滚动并直接映射到DOM元素的大小、左侧和顶部

如果一个滚动事件在特定边界内结束,我想“捕捉”到附近的位置,用一个颗粒的tween来修改同一个可滚动区域的滚动顶部

在进行此转换时,我希望任何用户滚动以立即覆盖动画,以便用户重新获得控制权



我觉得我离解决方案很近了,我注意到我的用例涉及浮点增量,用户滚动只会增加整数。我不确定这是否有用,这感觉像是一个黑客滥用,但我真的在寻找任何方法,我可以区分用户scrollTop更改,我的动画的scrollTop更改

我在我的项目中做了一些事情,我需要检测用户是否正在滚动,或者是我们的代码在滚动。我使用了一个全局变量
myVar
,它根据滚动事件更改其值。

这是代码

var myVar=false;
$(“#按钮”)。单击(函数(){
myVar=true;
$('html,body')。设置动画({
滚动顶部:$(“#底部”).offset().top
}, 2000);
});
$(窗口).bind('mousewheel-DOMMouseScroll',函数(事件){
myVar=false;
});
$(文档)。滚动(函数(){
log('滚动由'+(myVar==true?“用户”:“浏览器”)启动);
});
div:悬停{
文字装饰:下划线;
}

你好

点击这里往下看









































































































只需坐着
答案是跟踪添加的增量滚动距离,以及滚动顶部应该是什么

如果浏览器轮询scrollTop并发出scroll事件,则需要将该scrollTop与您想要添加的内容或scrollTop应该是的内容进行比较。你也可以继续听“轮子”而不是滚动


对我来说,最大的问题是scrollTop不能有浮点数,将scrollTop设置为150.999与设置为150是一样的,因此我建议事先使用Math.round(),并检查scroll
Math.abs(event.target.scrollTop-myScrollTop)<1
或类似的比较,因为myScrollTop仍然是正确的,浮点(非整数)数


同样值得一提的是,缩放和更改CSS参考像素(
window.devicePixelRatio
)似乎会影响scrollTop的摄取或发射

现在,如果我使用CMD+或CMD-,我的滚动行为会中断,但我将很快处理这个问题

如果您使用的是框架(特别是jQuery),您可以将一个参数传递给
.trigger()
调用。此调用将出现在代码生成的调用中,但在事件调用中不存在。