我试图让这个闪烁的文字在3秒后(或3-5次闪烁)停止。我已经将眨眼率设置为大约正确的速度,但无法弄清楚如何让它停止。
以下是代码:
$('.blink').each(function() {
var elem = $(this);
setInterval(function() {
if (elem.css('visibility') == 'hidden') {
elem.css('visibility', 'visible');
} else {
elem.css('visibility', 'hidden');
}
}, 200);
});
有什么建议吗?
我在这里编译了一个jQuery小提琴:http://jsfiddle.net/M4Fcd/173/
答案 0 :(得分:5)
setInterval无限期地继续 - 或直到停止。
您需要做的是在创建间隔时捕获intervalID,然后在完成间隔后清除间隔
var intervalID = setInterval(function....);
// when done
clearInterval(intervalID);
在您的特定情况下:
$('.blink').each(function() {
var elem = $(this);
// count the blinks
var count = 1;
var intervalId = setInterval(function() {
if (elem.css('visibility') == 'hidden') {
elem.css('visibility', 'visible');
// increment counter when showing to count # of blinks and stop when visible
if (count++ === 3) {
clearInterval(intervalId);
}
} else {
elem.css('visibility', 'hidden');
}
}, 200);
});
答案 1 :(得分:4)
你也可以像这样使用fadeIn / fadeOut
$('.blink').each(function() {
var elem = $(this);
elem.fadeOut(100)
.fadeIn(100)
.fadeOut(100)
.fadeIn(100)
.fadeOut(100)
.fadeIn(100);
});
答案 2 :(得分:3)
$('.blink').each(function() {
var elem = $(this);
refreshIntervalId = setInterval(function() {
if (elem.css('visibility') == 'hidden') {
elem.css('visibility', 'visible');
} else {
elem.css('visibility', 'hidden');
}
}, 200);
});
setTimeout(function(){
clearInterval(refreshIntervalId);
}, 3000)
答案 3 :(得分:1)
好的,有更好的方法。您可以使用 visibility:hidden 切换css类,代码变得更简单,如果您想在可见/不可见时停止,只需要使用 hasClass 进行检查。
$('.blink').each(function() {
var elem = $(this),
timer = 0,
interval = 200,
stopAfter = 3000,
intervalId = setInterval(function() {
elem.toggleClass('blink');
if(timer > stopAfter && !elem.hasClass('blink')) {
clearInterval(intervalId);
}
timer += interval;
}, interval);
});
小提琴:http://jsfiddle.net/M4Fcd/183/
现在你可以在它可见或不可见时停止它,但这个想法是完全相同的。
$('.blink').each(function() {
var elem = $(this),
timer = 0,
interval = 200,
stopAfter = 3000;
refreshIntervalId = setInterval(function() {
if (elem.css('visibility') == 'hidden') {
elem.css('visibility', 'visible');
if(timer > stopAfter) {
clearInterval(refreshIntervalId);
}
} else {
elem.css('visibility', 'hidden');
}
timer += interval;
}, interval);
});
答案 4 :(得分:1)
试试这个:
var i = 0;
var blink;
$('.blink').each(function() {
var elem = $(this);
blink = setInterval(function() {
if (elem.css('visibility') == 'hidden') {
elem.css('visibility', 'visible');
i++;
if(i >= 3){
clearInterval(blink);
}
} else {
elem.css('visibility', 'hidden');
}
}, 200);
});
答案 5 :(得分:0)
我想我的答案最短。
function blinkElement(elm, interval, duration) {
elm.style.visibility = (elm.style.visibility === "hidden" ? "visible" : "hidden");
if (duration > 0) {
setTimeout(blinkElement, interval, elm, interval, duration - interval);
} else {
elm.style.visibility = "visible";
}
}
以200毫秒的速率闪烁3秒。
blinkElement(element, 200, 3000);