如果用户正在滚动,则禁用div上的自动刷新(JQuery)

时间:2012-04-03 21:43:49

标签: php jquery css scroll refresh

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

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

我在div设置为200px的最大高度,并滚动到自动。如果用户滚动此div,我怎么能阻止div刷新?然后如果用户停止滚动,再次开始刷新??

谢谢!

3 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:2)

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

DEMO

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滚动事件进行简单轮询就可以了。见DEMO

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');            
        }
    }

});

答案 2 :(得分:0)

为此,我认为您需要实现自定义滚动事件,如下所示:http://james.padolsey.com/javascript/special-scroll-events-for-jquery/

然后你可以创建一个全局变量(甚至更好,在带有区间代码的闭包中),让我们称之为var isScrolling = false。为scrollstartscrollstop创建处理程序:

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);