Jquery 如何在滚动停止时触发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上,我正在这样做ajax请求

$(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
});