2017-01-12 2 views
1

У меня есть этот код, чтобы запустить функцию setTimeout с помощью кнопки и остановить ее с помощью другой кнопки, но если я остановил ее и запустил, она начнется, есть ли способ получить кнопка паузы/продолжения?Как приостановить функцию setTimeout

Javascript код:

var timeout1, timeout2, timeout3; 

function timedText() { 
    timeout1 = setTimeout(desertAK, 1000) 
    timeout2 = setTimeout(fourAlarmShotgun, 5000) 
    timeout3 = setTimeout(frostbiteAR, 9000) 
} 

function stopTimeout() { 
    clearTimeout(timeout1); 
    clearTimeout(timeout2); 
    clearTimeout(timeout3); 
} 

function desertAK() { 
    document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Desert%20Warfare%20AK-47%22"></iframe>'; 
} 
function fourAlarmShotgun() { 
    document.getElementById("leser2").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Four%20Alarm%2012GA%20Pump%20Shotgun%22"></iframe>'; 
} 
function frostbiteAR() { 
    document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Frostbite%20AR-15%22"></iframe>'; 
} 

HTML кнопки:

<button onclick="timedText()">Start</button> 

    <button onclick="stopTimeout()">Stop</button> 
+3

Возможный дубликат http://stackoverflow.com/questions/3969475/javascript-pause-settimeout –

+0

Проверьте этот ответ HTTP: //stackoverflow.com/questions/3969475/javascript-pause-settimeout#answer-3969760 – NewToJS

+0

@NewToJS Я прочитал его, но я не понимаю, как я должен это делать с моим кодом, мне нужна дополнительная помощь, извините, я очень новичок в Javascript! –

ответ

2

var Timer = (function() { 
 
    var isExeced = [1,1,1]; 
 
    var timeout1, timeout2, timeout3; 
 
    var startTime, costTime = 0; 
 
    var finished = false; 
 
    var status = 0; 
 

 
    function reset() { 
 
     costTime = 0; 
 
     status = 0; 
 
     finished = false; 
 
     isExeced = [1,1,1]; 
 
    } 
 

 
    function desertAK() { 
 
     document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Desert%20Warfare%20AK-47%22"></iframe>'; 
 
    } 
 

 
    function fourAlarmShotgun() { 
 
     document.getElementById("leser2").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Four%20Alarm%2012GA%20Pump%20Shotgun%22"></iframe>'; 
 
    } 
 

 
    function frostbiteAR() { 
 
     document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Frostbite%20AR-15%22"></iframe>'; 
 
    } 
 

 
    function timedText() { 
 
     if (finished) { 
 
      return resume(); 
 
     } 
 

 
     if (status === 1) { 
 
      return; 
 
     } else { 
 
      status = 1; 
 
     } 
 

 
     startTime = +new Date(); 
 
     
 
     if (isExeced[0]) { 
 
      timeout1 = setTimeout(function() { 
 
       isExeced[0] = 0; 
 
       desertAK(); 
 
      }, 1000 - costTime); 
 
     } 
 

 
     if (isExeced[1]) { 
 
      timeout2 = setTimeout(function() { 
 
       isExeced[1] = 0; 
 
       fourAlarmShotgun(); 
 
      }, 5000 - costTime); 
 
     } 
 

 
     if (isExeced[2]) { 
 
      timeout3 = setTimeout(function() { 
 
       isExeced[2] = 0; 
 
       finished = true; 
 
       status = 0; 
 
       frostbiteAR(); 
 
      }, 9000 - costTime); 
 
     } 
 
    } 
 

 
    function stopTimeout() { 
 
     costTime += +new Date() - startTime; 
 
     status = 0; 
 

 
     clearTimeout(timeout1); 
 
     clearTimeout(timeout2); 
 
     clearTimeout(timeout3); 
 
    } 
 

 
    function resume() { 
 
     stopTimeout(); 
 
     reset(); 
 
     timedText(); 
 
    } 
 

 
    return { 
 
     start: timedText, 
 
     stop: stopTimeout, 
 
     resume: resume 
 
    } 
 
})();

Использование, как показано ниже:

<button onclick="Timer.start();">Start</button> 
 
<button onclick="Timer.stop();">Stop</button>

+0

timedText не определен, появляется, когда я нажимаю кнопку запуска сейчас. Я не могу видеть, что тут неправильно. –

+0

теперь я получаю «Неожиданный идентификатор» и «Таймер не задан» –

+0

Могу ли я спросить, как я должен это делать, если захочу 'addEventListener' вместо' onclick = "timer.stop();" '- Я пробовал это следующим образом:' 'и код javascript следующим образом:' var startbtn = document.getElementById ("startbtn"); 'и' startbtn.addEventListener ("click", Timer.stop()); 'но он не будет работать –

0

Добавить точку останова переменной состояния, которое сохранить последний делает операцию

var timeout1, timeout2, timeout3; 
var status = 0; 

function timedText() { 
    if(status + 1 == 1) { 
     timeout1 = setTimeout(desertAK, 1000) 
     timeout2 = setTimeout(fourAlarmShotgun, 5000) 
     timeout3 = setTimeout(frostbiteAR, 9000) 
    } else if(status == 2) {   
     timeout2 = setTimeout(fourAlarmShotgun, 5000) 
     timeout3 = setTimeout(frostbiteAR, 9000) 
     timeout1 = setTimeout(desertAK, 1000) 
    } else {   
     timeout3 = setTimeout(frostbiteAR, 9000) 
     timeout1 = setTimeout(desertAK, 1000) 
     timeout2 = setTimeout(fourAlarmShotgun, 5000) 
    }  
} 

function stopTimeout() { 
    clearTimeout(timeout1); 
    clearTimeout(timeout2); 
    clearTimeout(timeout3); 
} 

function desertAK() { 
    status = 0; 
    document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Desert%20Warfare%20AK-47%22"></iframe>'; 
} 
function fourAlarmShotgun() { 
    status = 1; 
    document.getElementById("leser2").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Four%20Alarm%2012GA%20Pump%20Shotgun%22"></iframe>'; 
} 
function frostbiteAR() { 
    status = 2; 
    document.getElementById("leser").innerHTML = '<iframe src="https://opskins.com/?loc=shop_search&sort=lh&app=433850_1&search_item=%22Frostbite%20AR-15%22"></iframe>'; 
}