暂停和恢复setTimeout程序

问题描述 投票:0回答:1

在昨天之前,我从未用Javascript写过任何东西。我是全新的。我在excel中编写过宏,但我对计算机非常熟悉。我正在尝试编写程序,因此我可以在浏览器中打开一个HTML文件,该文件将有一个按钮。当我按下按钮时,我希望它从一个随机数倒计时,然后当倒计时结束时,它会发出一声嘟嘟声并随机从一个项目列表中选择一个文本。

我大部分时间都处于工作状态(请记住这是我的第一个程序),但我希望合并一个允许我暂停计时器的功能,以便稍后恢复。我在这里包含了一些有用的数字,但这只是测试。

我一直在网上看其他“暂停和恢复”风格的问题,但我有点困惑。这对我来说太新了。

这是我迄今为止的计划....

<html>
<body>

<h2>Javascript CART breakdown calculator</h2>

<p id="demo"></p>
<p id="breakdown_item"></p>

<button onclick="setTimeout(myFunction, my_random_number*1000);">start timer</button>

<script>
var my_random_number, low, high;
low = 1;
high = 5;
my_random_number = Math.floor(Math.random() * high) + low;
document.getElementById("demo").innerHTML = my_random_number;

var audioCtx = new (window.AudioContext ||  window.webkitAudioContext)();

function myFunction(frequency, duration, callback) {
    duration = 10000 / 1000;     // the 10000 used to be 'duration' 

    // create Oscillator node
    var oscillator = audioCtx.createOscillator();

    oscillator.type = 'square';
    oscillator.frequency.value = 500; // value in hertz
    oscillator.connect(audioCtx.destination);

    oscillator.onended = callback;
    oscillator.start(0);
    oscillator.stop(audioCtx.currentTime + duration);

    var random_breakdown_event, low_event, high_event;
    low_event = 1
    high_event = 9
    random_breakdown_event = Math.floor(Math.random() * high_event) + low_event;

    var text
    if (random_breakdown_event == 1) text = "blown engine";
    if (random_breakdown_event == 2) text = "broken transmission";
    if (random_breakdown_event == 3) text = "broken suspension";
    if (random_breakdown_event == 4) text = "broken halfshaft";
    if (random_breakdown_event == 5) text = "broken cv joint";
    if (random_breakdown_event == 6) text = "broken wings";
    if (random_breakdown_event == 7) text = "electrical misfire";
    if (random_breakdown_event == 8) text = "broken fuel pump";
    if (random_breakdown_event == 9) text = "change battery";

    document.getElementById("breakdown_item").innerHTML = text

}

</script>

</body>
</html>

我想采用一种方法使这个计时器暂停和恢复。

javascript button settimeout resume pause
1个回答
0
投票

关于您的代码的一些评论。

1)按钮事件管理(适用于所有事件管理)

尝试以不引人注意的方式管理您的事件(尽管有一种新的倾向,即内联,例如使用React组件)。什么不引人注目的意思?这意味着您在javascript块中定义HTML之外的代码事件。

例如,如果您将id =“button-timer”分配给按钮,则可以执行以下操作:

<script>
     var button = document.getElementById('button-timer');
     button.addEventListener('click', myFunction);
</script>         

然后在你的myFunction里面你可以指定setTimeout。 setTimeout函数返回一个值,稍后您可以使用名为clearTimeout(<timer-reference>)的函数暂停/删除超时。因此,这为您提供了如何暂停/控制超时的提示。

2)而不是那么多if if()只使用Switch语句。所以你会做类似的事情:

switch(random_breakdown_event){
    case 1 : // some code;
        break;
    case 3 : // some code
       break;
    default: // default case action
}

所以暗示你如何管理暂停/停止过程,

<button id="button-timer">Start timer</button>
<script>
     var timer=null;

     function myFunction(){
          // Your function does stuff     
     }
     function buttonEventHandler(){
          timer = setTimeout('myFunction', <some-random-time>);
     }
     function pauseStop(){
         clearInterval(timer);
     }
     var button = document.getElementById('button-timer');
     button.addEventListener('click', buttonEventHandler);
</script>

这将是关于如何控制js代码中的计时器暂停操作的一般模式。

© www.soinside.com 2019 - 2024. All rights reserved.