Есть вот такой скрипт который должен после нажатия кнопки "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) } }()); Код (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) } }());
У тебя date устанавливается вне интервала и берёт время, в которое выполняется весь скрипт (после загрузки window), и, видимо, ты ни разу не попал в 34 секунды) Перенеси объявление объекта времени в интервал и он будет каждый интервал (100 миллисекунд) создавать новый объект времени (равный конкретному моменту запуска кода внутри интервала) и будет проверять его. Должно сработать
fafafafafafafa, а, второй вопрос примерно с той же области. Чекай время при запуске функции, и запускай setTimeout со значением, равным разнице (то есть, тип скок осталось до 120 или скок тебе там надо. Через несколько ифов сделай, что бы учесть и тот случай, когда меньше 120, и тот когда больше). А внутри интервала ставь уже таймаут на скок тебе надо, что бы каждую секунду оно работало или как тебе надо. Так получится, что у тебя будет 1 чек времени при запуске скрипта, потом запустится таймаут, а внутри уже будет крутиться интервал
fafafafafafafa, 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); } 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); }
Это вот на примере с твоими секундами. Тебе не надо каждый раз проверять, что 34 секунды. Один раз проверил при запуске и заложил разницу в таймаут. А дальше интервал