2015-05-06 24 views
3

我正在嘗試使用jQuery將頁面上下滑動(從左到右)。我已經完成了這個任務,但是如果在動畫還在繼續時繼續向上或向下滾動,它會在動作中間中斷它,導致它猶豫不決。我之前遇到過這個問題,如果不使用某種插件就無法解決問題。當用戶繼續滾動時,在滾動頁面上滑動div而不中斷動畫

我知道如何通過CSS轉換,jQuery UI,greensock等來實現這一點,但我很好奇,是否有一種方法可以防止jQuery的中斷。如果有一個純粹的JavaScript解決方案(沒有jQuery),我可以開放。

我的代碼:

var amountScrolled = 50; 

$(window).scroll(function() { 
    if ($(window).scrollTop() > amountScrolled) { 
     $('#slide').stop().animate({marginLeft:"0px"}, 500); 
    } else { 
     $('#slide').stop().animate({marginLeft: "-400px"}, 500); 
    } 
}); 

例子:https://jsfiddle.net/Hysteresis/hg9cvxop/6/

+0

(jQuery是JavaScript的) –

+1

它抽搐着,因爲每次滾動時,'$(窗口).scroll(函數(){'是我會得到滾動檢查函數來啓動另一個啓動動畫的函數,除非它已經在運行。 –

+0

爲什麼在CSS和其他第三方庫提供一個好方法時使用jQuery? –

回答

1

這工作:JSFIDDLE link

這是所有關於回調函數!

var amountScrolled = 50; 
var loopRunning = 0; 

$(window).scroll(function() { 
    if ($(window).scrollTop() > amountScrolled){ 
     if(loopRunning === 0){ 
      animateSlide("0px",500); 
     } 
    } else { 
     if(loopRunning === 0){ 
      animateSlide("-400px",500); 
     } 
    } 
}); 

function animateSlide(px, time){ 
    loopRunning = 1; 
    $('#slide').stop().animate({marginLeft:px}, time, function(){ 
     loopRunning = 0; 
    }); 
} 
+0

嘿,謝謝!我會對回調函數做更多的研究。出於某種原因,我從來沒有想到,每次滾動時都會重新啓動動畫,因爲它應該已經很明顯。這非常有幫助! – Hysteresis

1

好了,回答你的問題,而不是更好的方法來做到這一點提供諮詢,我通常通過分配一個臨時的類來表示的東西是被動畫的過程中處理這樣的任務。正如其他人所說,造成口吃的原因是因爲滾動功能被多次調用,所以您不斷停止並重新開始動畫。

所以,你可以嘗試這樣的事情(Fiddle):

var amountScrolled = 50; 

$(window).scroll(function() { 
    if ($('#slide').hasClass('sliding')) { 
     return; 
    } 
    if ($(window).scrollTop() > amountScrolled) { 
     $('#slide').stop().addClass('sliding').animate({marginLeft:"0px"}, 500, function() { 
      $(this).removeClass('sliding'); 
     }); 
    } else { 
     $('#slide').stop().addClass('sliding').animate({marginLeft: "-400px"}, 500, function() { 
      $(this).removeClass('sliding'); 
     }); 
    } 
}); 
+0

啊,這是有道理的。我從來沒有想過多次被調用。我仍然有很多東西需要學習。這看起來不錯,謝謝你的解釋和幫助! – Hysteresis

+1

很高興爲您提供幫助。我也想注意一下(因爲我不知道你的實際用例是什麼),如果你使用這樣的回調函數,你可能需要一個額外的檢查,看看你是否真的需要動畫事情。原因是無論塊是否需要移動,回調函數將在半秒的動畫持續時間後始終開啓。換句話說,當滾動功能沒有超過最初的回報時,這是半秒鐘。看到這個:https://jsfiddle.net/n3mk5dsk/1/ – thewatcheruatu

+0

更好!這正是我想要完成的。我試圖創建一個滾動到頂部的按鈕,在網頁上滑入和滑出。我知道如何使用其他方法完成此操作,但我想改進和擴展我的jQuery知識。再次感謝你!這真的很有幫助。 – Hysteresis