2012-08-28 223 views
4

任何人都可以提出一個簡單的jQuery垂直自動滾動腳本嗎?一個不膨脹,我只需要它自動啓動,並在一個div中滾動6個或更多li。我試過jquery.autoscroll.js,但無法讓它自動啓動。jQuery自動在div中垂直滾動

$.fn.autoscroll.defaults = { 
    start: { 
     step: 50, 
     scroll: true, 
     direction: "down", 
     pauseOnHover: true 
    }, 
    delay: 5000, 
    ffrw: { 
     speed: "fast", 
     step: 100 
    } 
}; 

回答

14
var div = $('div.autoscrolling'); 
var scroller = setInterval(function(){ 
    var pos = div.scrollTop(); 
    div.scrollTop(++pos); 
}, 100)​ 

Working Demo

編輯:

要停止滾動時,DIV已滾動至底部在上述function() {}末尾添加下面的檢查 -

if($(this).scrollTop() + $(this).innerHeight() >= this.scrollHeight) 
    clearInterval(scroller); 
} 
+2

當打到底,它會嘗試滾動,滾動,滾動,滾動 –

+2

@FlashThunder:目前已經有上SO檢查很多答案。檢查'scrollTop'是否已達到容器高度並使用'clearInterval'。大不了。這如何保證投票?建議一個解決方案,而不僅僅是問題。先做一些搜索。 –

+0

[要檢查div是否滾動到底部/底部](http://bit.ly/17nEh7d) –

1

羅賓的回答對我來說並不完全是訣竅,有幾個原因,所以這裏是他的方法的修改和擴展版本:

var div = $('.scrollbit'); 

$('.scrollbit').bind('scroll mousedown wheel DOMMouseScroll mousewheel keyup', function(evt) { 
    if (evt.type === 'DOMMouseScroll' || evt.type === 'keyup' || evt.type === 'mousewheel') { 

    } 
    if (evt.originalEvent.detail < 0 || (evt.originalEvent.wheelDelta && evt.originalEvent.wheelDelta > 0)) { 
     clearInterval(scrollbit); 
    } 
    if (evt.originalEvent.detail > 0 || (evt.originalEvent.wheelDelta && evt.originalEvent.wheelDelta < 0)) { 
     clearInterval(scrollbit); 
    } 
}); 

var scrollbit = setInterval(function(){ 
    var pos = div.scrollTop(); 
    if ((div.scrollTop() + div.innerHeight()) >= div[0].scrollHeight) { 
     clearInterval(scrollbit); 
    } 
    div.scrollTop(pos + 1); 
}, 100); 

與匿名user1248475這裏幫助:

Detect whether scroll event was created by user

和這樣的回答:

https://stackoverflow.com/a/9392134

希望這有助於任何人都希望解決如何自動滾動的問題與jQuery的div和當用戶手動滾動時停止。

0

github上的autoscroll.js下載在下載時有錯誤的文件。 如果你在那裏搜索,你可以找到它們。

我已經在下面的鏈接上做了一個工作演示,如果你喜歡,你可以複製它。

autoscroll.js at github

my working autoscroll demo