приостановка и возобновление программы setTimeout - PullRequest
0 голосов
/ 09 апреля 2019

До вчерашнего дня я буквально никогда не писал ничего с помощью 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>

Я хотел бы включить способ сделать этот таймер паузы и возобновить.

1 Ответ

0 голосов
/ 09 апреля 2019

Несколько комментариев относительно вашего кода.

1) Управление событиями кнопок (действительно для всех событий)

Попробуйте ненавязчиво управлять своими событиями (хотя есть новая тенденция делатьэто встроенный, например, с React Components).Что ненавязчиво значит?Это означает, что вы определяете события своего кода вне HTML, в блоке javascript.

Например, если вы назначите id = "button-timer" для вашей кнопки, вы можете сделать что-то вроде этого:

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

Тогда внутри вашего myFunction вы можете указать setTimeout.Функция setTimeout возвращает значение, которое вы можете позже использовать для приостановки / удаления таймаута с помощью функции с именем clearTimeout(<timer-reference>).Так что это дает вам подсказку о том, как приостановить / контролировать таймауты.

2) Вместо многих 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...