Я лежу, поэтому, пожалуйста, будьте добрыми :-)
Я нашел идеальные обратные часы. То, что я хочу достичь, это то, что после 1
слова Lift Off!
но почему-то часы обратного отсчета показывают 1
var startNum;
var currentNum;
function addClassDelayed(jqObj, c, to) {
setTimeout(function() { jqObj.addClass(c); }, to);
}
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
if (currentNum == 0) $('#countdown').html("Lift Off!"); else currentNum--;
$('#countdown').html(currentNum+1);
$('#countdown').removeClass("puffer");
}
$(function() {
startNum = 5;
currentNum = startNum;
$("#countdown").html(currentNum); // init first time based on n
self.setInterval(function(){anim()},1325);
});
$('#countdown').html(currentNum+1);
перезаписывает все, что вы установили ранее.
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
if (currentNum == 0) {
$('#countdown').html("Lift Off!");
clearInterval(token)
} else {
currentNum--;
$('#countdown').html(currentNum+1); // Only show if not "Lift Off!"
}
$('#countdown').removeClass("puffer");
}
var token;
$(function() {
startNum = 5;
currentNum = startNum;
$("#countdown").html(currentNum); // init first time based on n
token = self.setInterval(function(){anim()},1325);
});
Добавлено clearInverval
за предложение Тайлера
Давайте посмотрим в вашу функцию анимации:
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
if (currentNum == 0) $('#countdown').html("Lift Off!"); else currentNum--;
$('#countdown').html(currentNum+1);
$('#countdown').removeClass("puffer");
}
Если фигурные скобки отсутствуют после if-утверждения, они подразумевают, что они применимы только к следующему утверждению (единственному). Исходя из этого, добавьте фигурные скобки вокруг частей кода, где они подразумеваются:
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
if (currentNum == 0) {
$('#countdown').html("Lift Off!");
} else {
currentNum--;
}
$('#countdown').html(currentNum+1);
$('#countdown').removeClass("puffer");
}
Исходя из этого, когда currentNum равно 0, содержимое #countdown
становится "Lift Off!". затем немедленно измените на currentNum + 1
. Вот почему он никогда не заканчивается, показывая "Lift Off!".
Этот код будет либо печатать "Lift Off!". или текущее число (которое затем уменьшается после получения ссылки):
var startNum;
var currentNum;
var countdownInterval;
function addClassDelayed(jqObj, c, to) {
setTimeout(function() { jqObj.addClass(c); }, to);
}
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
if (currentNum === 0) {
$('#countdown').html('Lift Off!');
clearInterval(countdownInterval);
} else {
$('#countdown').html(currentNum--);
}
$('#countdown').removeClass("puffer");
}
$(function() {
startNum = 5;
currentNum = startNum;
$("#countdown").html(currentNum); // init first time based on n
countdownInterval = self.setInterval(function(){anim()},1325);
});
У вас есть ошибка в коде. Вы перезаписываете Lift off!
после операторов if
else
.
function anim() {
addClassDelayed($("#countdown"), "puffer", 600);
// Add a return statement here.
if (currentNum == 0) {
$('#countdown').html("Lift Off!");
return;
}
else {
currentNum--;
}
$('#countdown').html(currentNum+1);
$('#countdown').removeClass("puffer");
}
anim
будет по-прежнему запускаться каждые 1,3 секунды до конца жизни страницы. Вероятно, хорошая идея, чтобы очистить интервал после его завершения тоже.