2016-09-07 84 views
-1

我一直堅持這一段時間了。我正在嘗試製作自己的Scrollspy。事情是,它只能硬編碼的時候,如果我嘗試做它通過變量它不斷給我自定義滾動jquery只適用於手動編碼

$(document).ready(function() { 
    setInterval(check, 100); 
}); 

function isScrolledIntoView() 
{ 
    var docViewTop = $(window).scrollTop(); 
    var docViewBottom = docViewTop + $(window).height(); 
    var year = $('.year').eq(2).attr("class"); 
    var test = year.split(' '); 
    test = test[1]; 
    var elemTop = $(".item."+test).offset().top; 
    var elemBottom = elemTop + $(".item."+test).height(); 

    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); 
} 

var check = function(){ 
    var itemslength = $('.year').length; 
    for (var i = itemslength-1; i >= 0; i--) { 
     var year = $('.year').eq(i).attr("class"); 
     var yearsplitted = year.split(' '); 
     if(isScrolledIntoView()) 
     { 
      $(".year.2016").addClass("item-active"); 
     } 
     else 
     { 
      $(".year.2016").removeClass("item-active"); 
     } 
    } 
}; 

您可以在第一功能

var elemTop = $(".item."+test).offset().top; 

看到如果我試圖做到這一點通過變量,它不起作用。

http://jsfiddle.net/DFh7z/68/

編輯:我使用了錯誤的循環。

回答

0

在Javascript中,只有變量聲明被提起,而不是初始化。因此,當您在document.ready函數中調用「setInterval」時,「check」函數變量將不確定。

如果你想使用一個變量的「檢查」功能,試試你設定的時間間隔的呼叫轉移到你的腳本的末尾,像這樣:

function isScrolledIntoView() 
{ 
    var docViewTop = $(window).scrollTop(); 
    var docViewBottom = docViewTop + $(window).height(); 
    var year = $('.year').eq(2).attr("class"); 
    var test = year.split(' '); 
    test = test[1]; 
    var elemTop = $(".item."+test).offset().top; 
    var elemBottom = elemTop + $(".item."+test).height(); 

    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); 
} 

var check = function(){ 
    var itemslength = $('.year').length; 
    for (var i = itemslength-1; i >= 0; i--) { 
     var year = $('.year').eq(i).attr("class"); 
     var yearsplitted = year.split(' '); 
     if(isScrolledIntoView()) 
     { 
      $(".year.2016").addClass("item-active"); 
     } 
     else 
     { 
      $(".year.2016").removeClass("item-active"); 
     } 
    } 
}; 

$(document).ready(function() { 
    setInterval(check, 100); 
}); 

這應該讓你的腳本射擊,但我懷疑你需要更多的工作才能讓你的滾動間諜擴展功能發揮作用。

+0

不太能工作,這就是我想要做的:[http://jsfiddle.net/DFh7z/70/](http://jsfiddle.net/DFh7z/70/)我不斷收到'Uncaught TypeError:無法讀取未定義的屬性'top' –