2017-07-22 103 views
0

我想用鼠標點擊時滾動頁面。但是,當我多次點擊該功能時,它會再次運行。我只想運行它一次。當我讀到關於scrollBy的文章時,這個想法就出現了。代碼每次點擊都會運行更多

我該如何解決這個問題?

注:我試圖(的onmouseover)事件

window.onclick = function() { 
    "use strict"; 
    var m = setInterval(function() { 
     window.scrollBy(0,1); 
     console.info(m); 
    },4); 
    window.onmousemove = function() { 
     clearInterval(m); 
    }; 
}; 
+0

[本文](https://開頭WWW。 sitepoint.com/create-one-time-events-javascript/)可能會幫助你 –

回答

0

你的可變m保持在功能範圍定義window.onclick的間隔,這使得它從window.onmousemove內不可用。將您的變量定義在全球範圍內,那麼它可以從兩種功能:

var m; 

window.onclick = function() { 
    "use strict"; 
    m = setInterval(function() { 
     window.scrollBy(0,1); 
     console.info(m); 
    },4); 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
}; 

編輯說完看了一遍你的問題,你說你只想要這個功能只運行一次。在這種情況下,添加一個檢查,看看它是否已經運行:

var m; 
var hasRun = false; 

window.onclick = function() { 
    "use strict"; 

    if (!hasRun) { 
     m = setInterval(function() { 
      window.scrollBy(0,1); 
      console.info(m); 
     },4); 

     hasRun = true; 
    } 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
}; 
+0

感謝Fot幫助。但是我做了一個小小的編輯,讓它再次運行這個代碼'var m; var hasRun = false; window.onclick = function(){ 「use strict」; 如果(hasRun!){ 米= setInterval的(函數(){ window.scrollBy(0,1); console.info(米); },4); hasRun = true; } }; (m){ clearInterval(m); } var hasRun = false; };' – Ahmed

0

特別感謝:rickdenhaan 這是正確的代碼:

var m; 
var hasRun = false; 

window.onclick = function() { 
    "use strict"; 

    if (!hasRun) { 
     m = setInterval(function() { 
      window.scrollBy(0,1); 
      console.info(m); 
     },4); 

     hasRun = true; 
    } 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
    var hasRun = false; 
}; 
相關問題