2015-02-10 123 views
0

即時通訊有點難倒這一個。基本上我有一段代碼,當你點擊一個div時,它會觸發下面的代碼,這會使另一個div閃爍綠色,直到再次點擊該按鈕。問題是當函數再次被調用時,對var的引用不見了,div一直閃爍。保持間隔參考清除間隔

function muteEvent(id) { 
 
    var button = "#muteBox".concat(id.charAt(id.length - 1)); 
 
    var value = $(button).css("background-color"); 
 
    var slider = "#sliderKnob".concat(id.charAt(id.length - 1)); 
 
    var animation = function() { 
 
    if ($(slider).css("background-color") == 'rgb(0, 128, 0)') { 
 
     $(slider).css("background-color", "red") 
 
    } else { 
 
     $(slider).css("background-color", "green") 
 
    } 
 
    } 
 
    if (value == 'rgb(128, 128, 128)') { 
 
    $(button).css("background-color", "red"); 
 
    var timer = setInterval(animation, 1500) 
 
    } else { 
 
    alert("here"); 
 
    clearInterval(timer); 
 
    $(button).css("background-color", "#808080"); 
 
    } 
 
}

+0

'setInterval'返回你可以用'clearInterval'使用ID:'VAR計時器=的setInterval(動畫,1500); ... clearInterval(timer);' – Palpatim 2015-02-10 18:20:44

+0

我這樣做,當我再次調用該函數時,對該id的引用會丟失。 – 2015-02-10 18:24:47

+0

不符合您發佈的代碼。你永遠不會將'setInterval'的值存儲在第一位,並且你可以用函數參數調用'clearInterval',而不是間隔參考。 – Palpatim 2015-02-10 18:26:25

回答

1

clearInterval以便停止重複計時器需要的標識符(從setInterval返回)。在您撥打clearInterval時,將此標識符保存在某個範圍內 - 注意,它將以您的代碼設置的方式單獨調用muteEvent

var intervalId = null; 
 

 
function muteEvent(id) { 
 
    var button = "#muteBox".concat(id.charAt(id.length - 1)); 
 
    var value = $(button).css("background-color"); 
 
    var slider = "#sliderKnob".concat(id.charAt(id.length - 1)); 
 
    var animation = function() { 
 
    if ($(slider).css("background-color") == 'rgb(0, 128, 0)') { 
 
     $(slider).css("background-color", "red") 
 
    } else { 
 
     $(slider).css("background-color", "green") 
 
    } 
 
    } 
 
    if (value == 'rgb(128, 128, 128)') { 
 
    $(button).css("background-color", "red"); 
 
    intervalId = setInterval(animation, 1500) 
 
    } else { 
 
    alert("here"); 
 
    clearInterval(intervalId); 
 
    $(button).css("background-color", "#808080"); 
 
    } 
 
} 
 

 
$("#muteBox2").click(muteEvent.bind(null, "2"));
#muteBox2 { 
 
    background-color: rgb(128,128,128); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="muteBox2">Mute</div> 
 
<div id="sliderKnob2">Slider</div>

+0

謝謝你,我試着把var intervalId放在函數範圍內,這就是爲什麼它不起作用。它需要放在功能之外的全球範圍內。 – 2015-02-10 18:32:15