簡體   English   中英

clearInterval不會停止間隔

[英]clearInterval does not stop the interval

在這里瀏覽了相同的問題后,我找不到解決問題的方法。 我有以下問題

 function movement(mov, element) { canvasMov = document.getElementById('xy_canvas'); ctxMov = canvasMov.getContext("2d"); wMov = canvasMov.width; hMov = canvasMov.height; if (element != 'xy_canvas') { my_range = document.getElementById(element); if (mov) { my_interval = setInterval(function() { if (my_range != null) touchEvents(my_range.value); sendMovements(element); }, 160); } else { clearInterval(my_interval); console.log(element, mov); my_range.value = 0; } if (my_range.value == 0) clearInterval(my_interval); } else { if (mov) { my_interval = setInterval(function() { eventsMove(); sendMovements(); }, 160); } else { clearInterval(my_interval); console.log(element, mov); } } } 
 <div class="col12 fl"> <input type="range" id="alt_range" min="-1" max="1" value="0" step="0.2" class="slider" oninput="movement(true,'alt_range')" onmouseup="movement(false,'alt_range')"> </div> 

clearInterval不會停止間隔,也許我在這里缺少什么,請問任何建議嗎?

當您啟動一個新的間隔功能時,您不會停止舊的功能。 然后, clearInterval(my_interval)將僅停止最后一個啟動的程序,但是較舊的將繼續運行。 您需要調用clearInterval(my_interval); 在每個setInterval()調用之前。

而且由於所有代碼路徑最終都會調用setInterval()clearInterval() ,因此您只需在函數開始時執行一次clearInterval(my_interval)即可。

 function movement(mov, element) { canvasMov = document.getElementById('xy_canvas'); ctxMov = canvasMov.getContext("2d"); wMov = canvasMov.width; hMov = canvasMov.height; clearInterval(my_interval) if (element != 'xy_canvas') { my_range = document.getElementById(element); if (mov) { if (my_range.value != 0) { my_interval = setInterval(function() { if (my_range != null) touchEvents(my_range.value); sendMovements(element); }, 160); } } else { console.log(element, mov); my_range.value = 0; } } else { if (mov) { my_interval = setInterval(function() { eventsMove(); sendMovements(); }, 160); } else { console.log(element, mov); } } } 
 <div class="col12 fl"> <input type="range" id="alt_range" min="-1" max="1" value="0" step="0.2" class="slider" oninput="movement(true,'alt_range')" onmouseup="movement(false,'alt_range')"> </div> 

您需要做的就是在頂部定義my_interval ,例如

var my_interval = null;

目前,您正在if條件中創建my_interval ,對於其余代碼而言,它是隱藏的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM