我在IE(和IE Edge)中找到了,我得到的滚动事件太长了很长时间。轻弹鼠标垫可能会导致1-1.8秒的滚动事件被触发。
我不能设置2秒的节流,因为时间太长会导致用户感到沮丧。
我还尝试检查事件是不是太靠近(50ms或更短),但是如果用户在前一次执行期间执行新滚动并且他们的滚动在最后一次"额外"之后45ms开始。滚动事件被IE触发,然后它启动了一个全新的1-1.8秒事件(这可以永远继续)。
唯一可以解决这个问题的是,如果我可以滚动开始(类似于mousedown
)。
我对解决方案的错误尝试:
var lastEventTime = 0;
var lastTime = 0;
function scrollListener()
{
let now = new Date().getTime();
//Not listening, still scrolling
//Delay of 1 second isn't long enough
//50 milliseconds works 90% of the time, but I can initiate under that sometimes
if ( now < ( lastTime + 1000 ) || now - lastEventTime < 50 )
)
{
//Update event time
lastEventTime = now;
//Don't do rest of function
return;
}
...elided...
}