2014-12-27 106 views
-1

我知道這個主題已被覆蓋,但我沒有找到具體的東西,因爲我的問題和我發現的解決方案並沒有爲我工作(或我無法設法使它工作)。我基本上想滾動到下一個元素(100%高度元素)的頂部,如果向下滾動,並且如果從該元素向上滾動,我希望它滾動回頁面的頂部。scrollTop()函數無限循環

目前,我有這樣的:

var currDiv = 1; 

$(window).scroll(function(event) 
{ 

if (currDiv == 1) 
{ 

    $('html, body').animate({ 
     scrollTop:$('div.container').offset().top 
    }, 'slow'); 

    currDiv = 2; 

} 

else if (currDiv == 2) 
{ 

    $('html, body').animate({ 
     scrollTop:$('div.albums').offset().top 
    }, 'slow'); 

    currDiv = 1; 

} 

}); 

我知道它不具有「向上」和「向下」事件還沒有,它是錯的不同層次的,但它是第一個嘗試週期他們之間...問題是,它會觸發自己,它不斷循環回兩個元素之間...任何幫助將不勝感激。

http://jsfiddle.net/644eghbw/1/這裏是一個展示的jsfiddle問題

+0

當你設置currDiv後,把break;你必須打破如果。 – quid

+0

中斷不起作用,如果功能我認爲(非法陳述),我試過使用返回,但它也沒有工作。 – Malcom

+0

你可以把一個jsfiddle或什麼的HTML也? – quid

回答

1

你的動畫在滾動事件滾動位置。動畫滾動位置觸發滾動事件,從而創建無限循環。

您需要確保在當前正在運行的時候不要創建另一個滾動動畫。您可以使用變量和動畫回調來設置它。這裏有一個less-than-perfect example,展示了基本概念。

var currDiv = 1; 
var scrolling = false; 

$(window).scroll(function(event) 
{ 
    if (!scrolling) 
    { 
     if (currDiv == 1) 
     { 
      $('html, body').animate({ 
       scrollTop:$('.one').offset().top 
      }, 'slow', function() { 
       setTimeout(function() { 
        scrolling = false; 
       }, 1000); 
      }); 
      scrolling = true; 
      currDiv = 2; 
     } 
     else if (currDiv == 2) 
     { 
      $('html, body').animate({ 
       scrollTop:$('.two').offset().top 
      }, 'slow', function() { 
       setTimeout(function() { 
        scrolling = false; 
       }, 1000); 
      }); 
      scrolling = true; 
      currDiv = 1; 
     } 
    } 
});