2012-06-27 2 views
1

Как я могу реализовать setInterval или setTimeout при нажатии кнопки. мой код ниже не работает, и как я могу остановить его при втором нажатии кнопки?непрерывные циклы onClick of button

<!DOCTYPE HTML> 
<html> 
    <head> 
    <script> 
    i=0; 
    function cycle(){ 
     setInterval(animate(),2000); 
    } 

    function animate(){ 
     alert("task"); 
     console.log(i++); 
    }   
    </script> 

    <style> 
    #paper{ 
     background: #A3C45E; 
     width:200px; 
     height:300px; 
    } 
    </style> 
    </head> 
    <body> 
    <input type="button" onClick="cycle()" value="Cycle"> 
    <div id="paper"></div> 
    </body> 
</html> 

* редактировать без использования JQuery

ответ

1

Изменение:

setInterval(animate(),2000); // calls the animate function. 

To:

setInterval(animate,2000); // Pass the function as a reference for reuse. 

Очищает интервал на второй клик:

var i=0; 
var id; 

function cycle(){ 
    if (id){ 
     clearInterval(id); 
     id = null; 
    } 
    else 
     id = setInterval(animate, 2000); 
} 

function animate(){ 
    alert("task"); 
    console.log(i++); 
} 

Live DEMO

+0

о том, что где я пошло не так :) Спасибо много gdoron –

+0

@DanielEuchar. Я добавил демо. Удачи! – gdoron

+0

Действительно никогда не знал, что он принял ответ :) –

0
var i=0; 
var timer; 
function cycle(){ 
    // this is how you pass a function to setInterval 
    // setInterval returns a int representing the id of the interval 
    // EDIT 
    if(!timer) 
     timer = setInterval(animate,2000); 
    else{ 
     timer = false; 
     clearInterval(timer) 
} 

function animate(){ 
    alert("task"); 
    console.log(i++); 
    // clearInterval stops a interval, and you have to send as a param the id of that interval 
    // EDIT 
    // if(i>=1) clearInterval(timer) 
} 
+0

Это очищает интервал на второй итерации, а не второй клик ... так что здесь нет реального интервала. – gdoron

+0

Вы правы, не прочитали вопрос правильно – cuzzea

Смежные вопросы