JavaScript倒数计时器在多次调用时闪烁
javascript count down timer flickering on calling more than once
function countdown(element, minutes, seconds) {
// set time for the particular countdown
var time = minutes*60 + seconds;
var interval = setInterval(function() {
var el = document.getElementById(element);
// if the time is 0 then end the counter
if(time == 0) {
//el.innerHTML = "countdown's over!";
// document.getElementById("timer").style.visibility="hidden";
clearInterval(interval);
return;
}
var hour=Math.floor( time / (60*60) );
if (hour < 10) hour = "0" + hour;
var minutes = 0;
if(time>=60 && hour>0)
minutes=Math.floor( (time / 60 )-60);
else{
minutes=Math.floor( (time / 60 ));
}
if (minutes < 10) minutes = "0" + minutes;
var seconds = time % 60;
if (seconds < 10) seconds = "0" + seconds;
// var text = hour+":"+minutes; //+ ':' + seconds;
var text = minutes; //+ ':' + seconds;
el.innerHTML = text;
time--;
}, 1000);
}
当我调用方法 2wice 时,它会产生闪烁效果。即 countdown(element, 50, 0);
它倒计时,但如果我再次调用它,即 countdown(element, 35, 0);
是显示两个倒计时的电影
如果要在同一
元素上调用插件,则需要取消插件初始化时的间隔。否则,您将同时运行两个间隔。
我建议从函数返回间隔,并允许自己将该间隔作为参数传入。这样,您始终可以在开始之前取消间隔(以防已经有一个间隔)。如果传递间隔 var 的null
,您仍然可以运行clearInterval()
而不会引发错误。
例如:
function countdown(element, minutes, seconds, interval) {
// set time for the particular countdown
var time = minutes*60 + seconds;
clearInterval(interval);
return setInterval(function() {
...
您的第一个电话可能是:
var savedInterval = countdown('some-ele-id', 1, 1, null);
您的第二个电话可能是:
var interval = countdown('some-ele-id', 1, 1, savedInterval);
另一种解决方案是将间隔保存为全局变量并取消它,而不将其作为插件中的参数传递。
避免修改代码的替代方法是:
var interval;
...
function countdown(element, minutes, seconds) {
// set time for the particular countdown
var time = minutes*60 + seconds;
interval = setInterval(function() {
...
在您的第二个电话中:
clearInterval(interval);
countdown(element, 35, 0);
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 调用 blur() 时,IE 中文本区域和输入中的光标闪烁
- JavaScript倒数计时器在多次调用时闪烁
- 在Google Maps API v3上调用setContent()时,InfoWindow会闪烁
- 完整日历:重新获取事件调用会导致所有会议在重新渲染期间闪烁
- 如何消除 ajax 调用上的闪烁效果