2016-09-07 14 views
-1

私はこれでしばらくの間これに取り組んできました。私は自分のスクロールバーを作ろうとしている。事はハンドコードときにのみ動作することであり、私は変数を通してそれをやろうかどうかは、私は、変数を通じてそれを行うしようとするとあなたが最初の関数でカスタムスクロールバーjqueryは、手作業でのみ動作します

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

を見ることができる私に

$(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"); 
     } 
    } 
}; 

を与え続けます、それは動作しません。

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'を読み取れません –

関連する問題