Jquery 如何在滚动停止时触发ajax请求?
在window scroll上,我正在这样做ajax请求Jquery 如何在滚动停止时触发ajax请求?,jquery,ajax,scroll,Jquery,Ajax,Scroll,在window scroll上,我正在这样做ajax请求 $(window).scroll(function(){ //doing ajax request }); 但它正在为scroll事件创建多个ajax请求。是否有任何类似onscrollstop或仅在窗口滚动结束后触发的事件。或者有没有其他方法可以处理同样的情况。请建议。我不相信有onscrollstop侦听器,但您可以通过设置超时并在继续滚动时清除它来模拟它 var timeout = null; $(window).scroll
$(window).scroll(function(){
//doing ajax request
});
但它正在为scroll事件创建多个ajax请求。是否有任何类似onscrollstop或仅在窗口滚动结束后触发的事件。或者有没有其他方法可以处理同样的情况。请建议。我不相信有onscrollstop侦听器,但您可以通过设置超时并在继续滚动时清除它来模拟它
var timeout = null;
$(window).scroll(function() {
clearTimeout(timeout);
timeout = setTimeout(function() {
// do your ajax request
}, 100);
});
提供了一个解决方案
另一种方法,而不是计时器,是简单地设置一个标志,指示ajax请求已经在运行,并且在原始请求清除该标志之前不执行任何操作。如果希望ajax请求的发生频率不超过某个任意频率(例如,不超过每5秒一次),还可以在清除标记后设置计时器。您应该等待一小段时间,并且只有在不再发生滚动事件时才触发请求
var timer, // store a timeout reference
pendingAjax, // store the last AJAX request
scrollHandler = function() {
pendingAjax.abort(); // cancel the last request if it's still running
pendingAjax = $.ajax({...}); // start a new AJAX request
};
$(window).scroll(function() { // whenever the window is scrolled
clearTimeout(timer); // cancel the existing timer
timer = setTimeout(scrollHandler, 300); // and start a new one
});