Я пытаюсь создать анимацию типа обратного отсчета jQuery, которая после того, как она достигает 0, выполняет функцию. Однако у меня проблемы, потому что я не уверен, как это сделать. Я думал, что сделаю цикл while, а затем приостановит на секунду, пока он не достигнет 0. Однако не представляется возможным приостановить цикл while. Так что мне интересно, что это лучший способ сделать это? Благодарю.jQuery Countdown Each Second
ответ
Код:
var counter = 10;
var yourFunc = function(){}
var interval = setInterval(function(){
counter--;
if(counter <=0){ yourFunc(); clearInterval(interval); }
}, 1000);
Я хотел бы использовать рекурсивную функцию
var countDown = function(secondsRemaining){
secondsRemaining -= 1;
if(secondsRemaining <= 0){
//execute
} else {
//wait 1 second and call again
setTimeout(function(){
countDown(secondsRemaining);
}, 1000);
}
}
затем первоначально начать обратный отсчет (5 секунд)
countDown(5000);
'как только он ударяет 0, он выполняет функцию' – naomik
hense, почему я положил комментарий' // execute' в строке 4. Прочтите более внимательно перед голосованием – stackoverfloweth
Слишком переполняйте для такого простого друга задачи. – zsawaf
countdown
принимает HTMLElement для отображения себя и количество секунд для подсчетаОн возвращает обещание, которое решает, когда счетчик достигает 0
Мы можем использовать
.then
вызов применить функцию, когда обратный отсчет завершен
function countdown(elem, s) {
return new Promise(function(resolve) {
function loop(s) {
elem.innerHTML = s
if (s === 0)
resolve(elem)
else
setTimeout(loop, 1000, s - 1)
}
loop(s)
})
}
countdown(document.querySelector('#a'), 3).then(
function(elem) { console.log('done', elem) }
)
countdown(document.querySelector('#b'), 5).then(
function(elem) { console.log('done', elem) }
)
countdown(document.querySelector('#c'), 10).then(
function(elem) { console.log('done', elem) }
)
<p id="a"></p>
<p id="b"></p>
<p id="c"></p>
Вы также должны знать, что setTimeout
и setInterval
не гарантируют, что миллисекунд Используемый аргумент 100% точный & hellip;
var last = Date.now()
var interval = setInterval(function() {
var now = Date.now()
var delta = now - last
console.log(delta)
last = now
}, 1000)
setTimeout(clearInterval, 10000, interval)
// 1000
// 1003
// 998
// 1002
// 999
// 1007
// 1001
// ...
Если вам нужен долго работает таймер с высокой точностью, я рекомендую вам адаптировать решение использовать обновление дельты основы с часами. Если вы полагаетесь на setTimeout
или setInterval
для точности, вам будет грустно.
function countdown(elem, ms) {
return new Promise(function(resolve) {
function loop(ms, last) {
let now = Date.now()
let delta = now - last
if (ms <= 0) {
elem.innerHTML = 0
resolve(elem)
}
else {
elem.innerHTML = (ms/1000).toFixed(3)
setTimeout(loop, 25, ms - delta, now)
}
}
loop(ms, Date.now())
})
}
countdown(document.querySelector('#a'), 3000).then(
function(elem) { console.log('done', elem) }
)
countdown(document.querySelector('#b'), 5000).then(
function(elem) { console.log('done', elem) }
)
countdown(document.querySelector('#c'), 10000).then(
function(elem) { console.log('done', elem) }
)
<p id="a"></p>
<p id="b"></p>
<p id="c"></p>
Вы ищете что-то вроде этого ОП?
Выполняется каждую секунду. Вы можете использовать clearInterval() так же, как я добавил в раздел комментариев, когда вы хотите его остановить.
var start = 10; // time to countdown from in seconds
var interval = setInterval(
function(){
if (start == 0) {
complete();
clearInterval(interval);
}
$(".update").html("<h4>Countdown "+start+"</h4>");
start--;
}, 1000);
function complete() {
console.log("called the callback, value of start is: "+start);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="update">
</div>
Предполагается, что обратный отсчет и вызов пользовательской функции, когда таймер достигнет 0 – naomik
@naomik Итак, установите временной интервал в соответствии с тем, что вы хотите, как только время достигает 0, оно выполняется, если он хочет выйти из интервала , Я предоставил ему код для этого. – zsawaf
, так что OP должен установить 'i' на отрицательное число, так как ваш ответ всегда подсчитывается * вверх *? – naomik
Я хотел бы использовать что-то вроде следующего:
$(document).ready(function(){
var counter=10;
countDown();
function countDown(){
$('#showNumber').text(counter--);
if(counter>=0)
window.setTimeout(countDown,1000)
else
otherFunction();
}
function otherFunction(){
$('#showNumber').text('FINISHED!');
}
});
Попробуйте это. Это не требует jQuery.
var count = 5; // Number of times to run 'counter_function'.
// Run 'counter_function' every second (1000ms = 1 second)
var counter = setInterval(function(){
counter_function()
}, 1000);
// The function to run when 'count' hits 0.
var done_function = function() {
console.log('done');
}
// The function to run at each interval.
var counter_function = function() {
console.log('count');
count--;
if(count === 0){
done_function();
clearInterval(counter);
}
}
Он будет печатать слово «счет» каждую секунду в течение 5 секунд, и в последнюю секунду он также распечатает «done».
- 1. Аудиты Sql Failure Each Second
- 2. JQuery second()?
- 3. Продолжительность # toMinutes в Runnable Each Second
- 4. XML serialize step up each second row
- 5. JQuery Countdown ... время заканчивается
- 6. JavaScript/JQuery Countdown
- 7. Javascript/Jquery Date Countdown
- 8. Jquery Countdown Smooth Animation
- 9. Аукцион Countdown jQuery
- 10. Jquery Countdown Redirect
- 11. jQuery countdown progress bar
- 12. jQuery countdown to jquery event
- 13. JQuery rebat time second
- 14. jQuery ajax second post
- 15. jquery countdown сценарий не обновляется
- 16. jQuery CountDown Каждые 6 часов
- 17. Jquery Countdown Таймер не загружается
- 18. JQuery Countdown плагин не запускается
- 19. JavaScript Свидание с JQuery Countdown
- 20. Настройки часового пояса при использовании JQuery CountDown
- 21. JQuery. .each()
- 22. JQuery цикл .each странное поведение
- 23. jquery bind second ajax success
- 24. JQuery .each() массив в .each() массив
- 25. Бесконечный цикл each() в jQuery?
- 26. Countdown seconds, update database и loop Countdown
- 27. WPF Circular Countdown Timer
- 28. Daily Countdown Clock
- 29. jQuery .each() функция. Сброс индекса?
- 30. iPhonePicker-like-Countdown Plugin для jQuery
Возможно, вы ищете функцию setInterval() js timing? – zsawaf
может помочь (js): https://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/ –