1

我的页面上有一个 DIV #alerts_wrapper,每 5 秒刷新一次,如下所示:

refresh_alerts = setInterval(function () {
    $('#leftside div#alerts_wrapper').load('staffhome.php #alerts_container' );
}, 5000); 

我将 div 的最大高度设置为 200px,并滚动到自动。如果用户在此 div 上滚动,如何阻止 div 刷新?然后如果用户停止滚动,重新开始刷新??

谢谢!

4

3 回答 3

3

使用这个 Jquery 插件:scroll-startstop.events.jquery

使用上面提到的插件,您现在可以访问滚动事件,如下所示:

$('#yourdiv').bind('scrollstart', function(){
    //user is scrolling
});
$('#yourdiv').bind('scrollstop', function(){
    //user has finished scrolling
});

将此与 bool 标志结合使用以了解何时刷新 div。

您的最终代码应如下所示:

var isScrolling = false;

$('#yourdiv').bind('scrollstart', function(){
    isScrolling = true;
});
$('#yourdiv').bind('scrollstop', function(){
    isScrolling = false;
});

refresh_alerts = setInterval(function () {
    if (!isScrolling){
        $('#leftside div#alerts_wrapper').load('staffhome.php #alerts_container' );
    }
}, 5000); 
于 2012-04-03T21:53:25.517 回答
2

编辑:使用新代码更新,无需轮询,只需在滚动时设置/重置标志。

演示

var isScrolling = false;
$(function() {

    $('#scrollingDiv').on('scroll', function() {
        isScrolling = true;
    });

    refreshTimer = setInterval(refreshContent, 5000);

    function refreshContent() {
        if (!isScrolling) {
            $('#scrollingDiv').prepend('Latest Content <br />');//test code
            //$('#leftside div#alerts_wrapper').load('staffhome.php #alerts_container');            
        }
        isScrolling = false;
    }

});

---------- 旧帖 ----------

对 div 滚动事件进行简单的轮询就可以解决问题。见演示

var isScrolling = false;
var refreshTimer = null;
$(function() {

    $('#scrollingDiv').on('scroll', function() {
        isScrolling = true;
        if (refreshTimer != null) {
            clearInterval(refreshTimer);
            refreshTimer = null;
        }
    });

    //polling to see if still scrolling
    var pollScrolling = setInterval(function() {
        isScrolling = false;

        if (refreshTimer == null) {
            refreshTimer = setInterval(refreshContent, 5000);
        }    
    }, 500);

    //initialize timer
    refreshTimer = setInterval(refreshContent, 5000);

    function refreshContent() {
        if (!isScrolling) {
            $('#scrollingDiv').prepend('Latest Content <br />');
            //$('#leftside div#alerts_wrapper').load('staffhome.php #alerts_container');            
        }
    }

});
于 2012-04-03T22:02:55.723 回答
0

为此,我认为您需要实现此处概述的自定义滚动事件:http: //james.padolsey.com/javascript/special-scroll-events-for-jquery/

然后你可以创建一个全局变量(或者更好的是,在一个带有区间代码的闭包中),我们称之为var isScrolling = false. scrollstart为和创建处理程序scrollstop

jQuery(div).on( 'scrollstart', function( ) {
    isScrolling = true;
} );
jQuery(div).on( 'scrollstop', function( ) {
    isScrolling = false;
} );

最后,检查滚动标志的间隔:

refresh_alerts = setInterval(function () {
    if( !isScrolling ) {
        $('#leftside div#alerts_wrapper').load('staffhome.php #alerts_container' );
    }
}, 5000); 
于 2012-04-03T21:57:00.393 回答