2013-06-18 75 views
1

我想要使用jquery點擊一個元素時,相對於當前位置滾動div。但它必須在3000毫秒後滾動,所以試圖延遲它。現在它在點擊後立即相對於頂部滾動300px。如果我再次點擊什麼都沒有發生。相對於當前位置滾動Jquery

這是迄今爲止代碼:

$('#scroll').click(function(){    
      $('.vluchtelinginfo').delay(3000).scrollTop(+300); 
     }); 

感謝您的幫助。

回答

0

這不是如何delay()的作品。

在你的情況下,使用

setTimeout(function() { 
    $('.vluchtelinginfo').scrollTop(+300); 
}); 

%的文檔在隊列中delay()

只有後續事件都被延遲;例如,這將 不延遲.show()或.hide()的無參數形式,其中 不使用效果隊列。

+0

謝謝,這幫助我。你也對滾動事物有一個想法嗎? – luukgruijs

+0

我現在的代碼是:$('#scroll')。單擊(函數(){\t \t \t變種延遲= 3000; \t \t \t \t \t \t \t的setTimeout(函數(){ \t \t \t \t \t $()scrollTop的(300) 'vluchtelinginfo。'; \t \t \t \t},延遲); \t \t \t}); – luukgruijs

0

你可以嘗試這樣的事情......

$("#scroll").click(function() { 
    setTimeout(function() { 
     $(".vluchtelinginfo").css("top", $(".vluchtelinginfo").offset().top + 300); 
    }, 3000); 
}); 
+0

這不起作用。謝謝你的幫助 – luukgruijs

4

布拉德·M的有關使用setTimeout建議是得到你想要的東西的一種方式。 scrollTop()未在jQuery提供的「效果」中列出,因此delay()將不會受到影響,因爲delay()僅影響效果。

但是,可以使用animate()盡出滾動的效果,例如以下爲動畫滾動:

$scrollable.animate({scrollTop: x}); 

由於animate()是一個「效果」,它應該由delay()影響。所以,你可以這樣做:

$scrollable.delay(3000).animate({scrollTop: x}); 

但是,你遇到了另一個問題:當scrollTop(x)被稱爲x絕對值,不是相對一個。撥打scrollTop(+300)與撥打scrollTop(300)完全相同。在這種情況下,+符號沒有特殊含義。如果你希望你的滾動是相對的,那麼你需要先獲得前一個scrollTop值,並添加你想要滾動的相對距離。例如,

$scrollable.delay(3000).animate({scrollTop: $scrollable.scrollTop() + 300}); 

fiddle把上述原則工作。

相關問題