jquery捕获在()之前激发的事件
我调用jquery捕获在()之前激发的事件,jquery,events,Jquery,Events,我调用DIV.scrollTop(200)函数,并且仅在绑定DIV.on('scroll')之后调用,但是DIV.on('scroll')捕获绑定之前调用的DIV.scrollTop(200)事件 为什么以及如何避免这种情况 <div id="1" style="width:300px; height:300px; overflow:scroll; border:1px solid;"> <div style="width:600px; height:600px; "
DIV.scrollTop(200)
函数,并且仅在绑定DIV.on('scroll')
之后调用,但是DIV.on('scroll')
捕获绑定之前调用的DIV.scrollTop(200)
事件
为什么以及如何避免这种情况
<div id="1" style="width:300px; height:300px; overflow:scroll; border:1px solid;">
<div style="width:600px; height:600px; "></div>
</div>
$('#1').scrollTop(200);
$('#1').on('scroll', function(){
$(this).css("background-color", "red");
});
$('#1')。滚动顶部(200);
$('#1')。在('scroll',function()上{
$(this.css(“背景色”、“红色”);
});
滚动
事件看起来是异步的,甚至强制立即重新绘制似乎也不起作用。使用vanilla JS而不是jQuery也不会改变观察到的行为
我看不到任何编程方法来确定滚动
事件是由用户还是由脚本触发的。我认为增加延迟是你唯一的解决办法
重新绘制(将触发滚动
事件)将在requestAnimationFrame
完成后发生,因此仅在以下情况下连接侦听器:
requestAnimationFrame
运行(表示不久将进行重新绘制),并且
- 在
设置超时之后(指示重新绘制已发生)
$('#1')。滚动顶部(200);
requestAnimationFrame(()=>{
设置超时(()=>{
$('#1')。在('scroll',function()上{
$(this.css(“背景色”、“红色”);
});
});
});代码>
尝试使用SetTimeOut延迟绑定。好主意,但我不需要延迟。我知道您不想延迟。但是由于滚动行为看起来是不同步的,所以应用1ms或5ms这样的低延迟应该可以解决这个问题。也许零毫秒延迟也可以。2毫秒延迟在Chrome中也可以,但我不知道其他浏览器,也不知道这在未来的浏览器版本中是否足够