Загрузка...

Помогите с выполнением действия по таймеру .js

Тема в разделе Frontend создана пользователем fafafafafafafa 21 авг 2021. 141 просмотр

  1. fafafafafafafa
    fafafafafafafa Автор темы 21 авг 2021 3 27 июл 2021
    Есть вот такой скрипт который должен после нажатия кнопки "Run" каждую минуту ровно в 34 секунды выполнять действие (в моем примере это console.log("asd")), но почему-то он ничего не делает, кто знает, в чем ошибка?
    Код

    (function() {
    'use strict';

    window.addEventListener('load', () => {
    addButton('RUN', autoclck)
    })

    function addButton(text, onclick, cssObj) {
    cssObj = cssObj || {position: 'absolute', bottom: '92.5%', left:'20%', background: 'orange', color: 'white', width: '160px', height: '30px', 'z-index': 3}
    let button = document.createElement('button'), btnStyle = button.style
    document.body.appendChild(button)
    button.innerHTML = text
    button.onclick = onclick
    Object.keys(cssObj).forEach(key => btnStyle[key] = cssObj[key])
    return button
    }

    var date = new Date();
    function autoclck() {
    console.log("Start Waiting")
    window.setInterval(function(){ // Интервал проверок
    if(date.getSeconds() === 34){
    console.log("asd")
    }
    }, 100)
    }

    }());
     
  2. OneSadDev
    OneSadDev 21 авг 2021 3x^3 + const....а, о чем это я? 25 8 мар 2021
    У тебя date устанавливается вне интервала и берёт время, в которое выполняется весь скрипт (после загрузки window), и, видимо, ты ни разу не попал в 34 секунды)
    Перенеси объявление объекта времени в интервал и он будет каждый интервал (100 миллисекунд) создавать новый объект времени (равный конкретному моменту запуска кода внутри интервала) и будет проверять его. Должно сработать
     
    1. Посмотреть предыдущие комментарии (5)
    2. fafafafafafafa Автор темы
      OneSadDev, Я уже сделал, спасибо
    3. OneSadDev
      fafafafafafafa, а, второй вопрос примерно с той же области. Чекай время при запуске функции, и запускай setTimeout со значением, равным разнице (то есть, тип скок осталось до 120 или скок тебе там надо. Через несколько ифов сделай, что бы учесть и тот случай, когда меньше 120, и тот когда больше). А внутри интервала ставь уже таймаут на скок тебе надо, что бы каждую секунду оно работало или как тебе надо.
      Так получится, что у тебя будет 1 чек времени при запуске скрипта, потом запустится таймаут, а внутри уже будет крутиться интервал
    4. OneSadDev
      fafafafafafafa,
      JavaScript


      function autoclck() {
      const start = new Date();
      const second = start.getSecond();
      if (second < 34) {
      const diff = 34 - second;
      } else if (second > 34) {
      const diff = 60 - second + 34;
      } else if (second === 34) {
      // здесь запусти интервал
      }
      setTimeout(() => {
      setInterval(() => {
      console.log('asd')
      }, 60000);
      console.log('asd')
      }, diff * 1000);
      }
  3. OneSadDev
    OneSadDev 21 авг 2021 3x^3 + const....а, о чем это я? 25 8 мар 2021
    Это вот на примере с твоими секундами. Тебе не надо каждый раз проверять, что 34 секунды. Один раз проверил при запуске и заложил разницу в таймаут. А дальше интервал
     
    1. fafafafafafafa Автор темы
      OneSadDev, Спасибо огромное за помощь!
Загрузка...
Top