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

哪裏contentW和windowW被設置和什麼是他們被設置爲? – glortho 2012-01-05 20:00:24

+0

這只是一個瘋狂的猜測,因此是一個評論,但它看起來像是如果用戶將鼠標放在屏幕的右側,它將繼續製作間隔定時器。您的變量是本地變量,這意味着每次觸發鼠標移動時都會創建一個新副本。嘗試將變量設置爲全局變量,並在分配startScrollRight/startScrollLeft之前始終將其清除。 – 2012-01-05 20:00:45

回答

0

你需要使用設置startScrollLeft和startScrollRight爲全局變量

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 2012-01-05 21:07:29

+0

如果你這樣做:clearInterval(startScrollLeft)它會產生一個錯誤,因爲startScrollLeft從來沒有定義過(如果鼠標從中間開始,這是相當普遍的) – 2012-01-05 22:33:02

+0

你是否認爲這是我的意思?你是對的,這可能是問題的一部分,但這與這個線程中的範圍問題無關。你可能想在你的回答或上面的評論中建議OP首先定義變量。 – glortho 2012-01-05 22:37:55