2016-05-17 3 views
0

(イベントをスクロール)ループ内で一度初期位置を確認EDITJS/jQueryの -

var setInitPos = true; 

function loop() { 

    $(".image").each(function() { 
    // some other code 

    if (imageIsVisible) { 
     // some other code 

     // Set variable initPos only once for each item 
     if (setInitPos) { 
     initPos = $(window).scrollTop(); 
     setInitPos = false; 
     } 
    } 

    // some other code 
    }) 

} 

$(window).scroll(function(){ loop() } 

アイテムは、ビューポート内に表示されている場合、各項目の値で一度VaRのinitPosを埋めます。

ただし、2番目の項目はsetInitPos = falseで始まります。何故ですか?

+1

どのようなローカル変数ですか? 'initPos'はそれぞれの内部でローカルではありません。 – epascarello

+0

if条件の中に 'initPos'があります。 – Ben

+0

ブロック内でローカル変数が 'var'で宣言されていますが、' var'は表示されません。また、グローバル変数とローカル変数を持つ変数に同じ名前をつけても、あなたが望むものは得られません。 – epascarello

答えて

0

EDIT

「(imageIsVisible){場合は」内「のvar initPos」を宣言する

試してみますあなたができるDOM要素はjQuery.data()

$(".image").each(function() { 
    var initPos = $(this).data('initpos') || 0; 

    // some other code 

    if (imageIsVisible) { 
     // some other code 

     // Set variable initPos only once for each item 
     if (!initPos) { 
     $(this).data('initpos',$(window).scrollTop()); 
     } 
    } 
+0

ありがとうございますが、たびにinitPosが再びスクロールされます。私はそれを一度しか設定したくない。 – Ben

+0

あなたは実際にあなたが参照しているものではないあなたの用語 'ローカル変数 'と人を混同しました。あなたがする必要があるのは、各要素の最後の位置の値を '.data() 'で保存することです。 – Adam

+0

Perfect answer @Adam - ** initPos **と** initpos **のみでなければなりませんあなたのコードはうまく動作します!ありがとう! – Ben

1

グローバルスコープで指定したため、グローバルです。

iterationをローカルにするには、関数内で宣言します。

イメージにローカルにするには、this.initPosを使用します。この方法で、イメージ要素ごとに新しい属性を作成します。

+0

スクロールイベントの内部です。次回はスクロールすると再び0で始まり、変数は再び設定されます。一度しか起こらないはずです。 – Ben

+0

@Benあなたは問題を解決するために必要な全体コードを投稿します –

0

initPos以外の変数は宣言されていません。そしてその唯一の宣言。 DOM要素ごとにinitPosを持続するための最良の方法は、それぞれに取り付けることである再び

関連する問題