0

私は横にスクロールするページを作ります&マウスが100pxをブラウザウィンドウの端に近づけると右にスクロールします。私は次のスクリプトを書いたが、マウスがそのページの中央に移動するときに間隔を空けないことを拒否する。javascript clearInterval問題

編集:ここではjs全体を貼り付けません。startScrollLeftと..Rightはすでにグローバル変数として定義されています。私はダミーのページを作ったhere。ページと、コードがどのように機能しているかを確認できます。

$(document).mousemove(function(e){ 

     var cursorX = e.pageX; 

     if (cursorX > windowW - 100){ 
      startScrollLeft = setInterval(scrollLeft, 50); 
     }else { 
      clearInterval(startScrollLeft); 
     } 

     if (cursorX < 100){ 
      startScrollRight = setInterval(scrollRight, 50); 
     }else{ 
      clearInterval(startScrollRight); 
     } 

    }); 
    var scrolledAmount = 20; 
    function scrollLeft(){ 
     if($('.content').width() > scrolledAmount + contentW + windowW - 400){ 
      $('.content').animate({ 
       left: '-='+20+'px' 
      },70, 'linear'); 
      scrolledAmount = scrolledAmount+20; 
     } 
    } 
    function scrollRight(){ 
     if(scrolledAmount > 20){ 
      $('.content').animate({ 
       left: '+='+20+'px' 
      },70,'linear'); 
      scrolledAmount = scrolledAmount-20; 
     } 
    } 

この問題に手を必要とする:/

+0

として設定startScrollLeftとstartScrollRightを使用する必要があります? – glortho

+0

これは野生の推測であり、したがってコメントですが、ユーザーがマウスを画面の右側に置いたままにすると、インターバルタイマーが作成されるように見えます。あなたの変数はローカル変数です。つまり、mousemoveがトリガーされるたびに新しいコピーが作成されます。 startScrollRight/startScrollLeftを割り当てる前に、変数をグローバルにして、常にクリアしてみてください。 –

答えて

0

あなたはグローバルVARS contentWとwindowWが設定されており、それらがどのように設定されている

var cursorX = e.pageX; 

if (cursorX > windowW - 100){ 
    window.startScrollLeft = setInterval(scrollLeft, 50); 
}else { 
    clearInterval(window.startScrollLeft); 
} 

if (cursorX < 100){ 
    window.startScrollRight = setInterval(scrollRight, 50); 
}else{ 
    clearInterval(window.startScrollRight); 
} 
+0

startScrollLeftとstartScrollRightはvarなしで割り当てられているので、すでにグローバルです。 – glortho

+0

clearInterval(startScrollLeft)startScrollLeftが定義されていないため、エラーが生成されます(マウスが中央で始まる場合、それはかなり一般的です) –

+0

これは私にとって意味ですか?あなたは正しいのですが、それは問題の一部ですが、それはこのスレッドのスコープの問題とは関係ありません。上記の答えまたは答えにOPが最初に変数を定義することを提案することができます。 – glortho