我制作了一些脚本来对我的网站进行倒计时,它会在所有截止日期类上循环并更改时钟。
这是代码
self.setInterval(function(){
$('.deadline_container').each(function(){
days = parseInt($(this).children('.deadline_days').html(),10);
time = $(this).children('.deadline_time').html().split(':');
hours = parseInt(time[0],10);
minutes = parseInt(time[1],10);
seconds = parseInt(time[2],10);
if(seconds > 0){
seconds -= 1;
} else if(minutes > 0){
minutes -= 1;
seconds = 59;
} else if(hours > 0){
hours -= 1;
minutes = 59;
seconds = 59;
} else if(days > 0){
days -= 1;
hours = 23;
minutes = 59;
seconds = 59;
}
sec = (seconds < 10) ? '0' + seconds : seconds;
min = (minutes < 10) ? '0' + minutes : minutes;
hh = (hours < 10) ? '0' + hours : hours;
$(this).children('.deadline_days').html(days);
$(this).children('.deadline_time').html([hh,min,sec].join(':'));
});
}, 1000);
我还有一些代码可以在鼠标悬停时显示div上的叠加
$('.someDivClass').live({
mouseover: function() {
$(this).children('.background').children('.overlay').stop().animate({opacity:"1"}, 300);
},
mouseout: function() {
$(this).children('.background').children('.overlay').stop().animate({opacity:"0"}, 300);
}
});
这两段代码效果很好,动画没有任何问题,问题是当间隔运行并且我将其中一个div覆盖时,覆盖动画会冻结,直到倒计时一秒钟。有时看起来没有动画,只是突然出现叠加层。有时候看起来很好,这一切都取决于我在盘旋时的瞬间。我认为setInterval函数会停止动画队列,直到它停止执行它自己的代码。
我认为jquery或类似的东西没有线程。
所以问题是:
¿如何在不依赖时钟间隔的情况下使叠加动画平滑?
¿是否有更有效的方法来进行倒计时或重叠动画?
我正在使用jquery 1.8.2和jQuery UI 1.9.0
修改
我以前没有意识到,我也有不透明度的变化,像这样:
$('#top_bar, #top_bar_container').hover(
function(event){
$(this).stop().animate({backgroundColor:"rgba(0,0,0,0.5)"}, 300);
},
function(event){
$(this).stop().animate({backgroundColor:"rgba(0,0,0,0.2)"}, 1000);
}
);
无论如何,动画都能顺利运行! 所以它可能是实时函数(我需要它,因为我使用AJAX向页面添加内容)或不透明动画背景动画(在CPU术语上可能更昂贵)
任何帮助都将不胜感激,谢谢。
修改
这是我的DOM
<div class="someDivClass">
<div class="background">
<div class="overlay">
<div class="deadline">
<div>Time Left</div>
<div class="deadline_container">
<div class="deadline_days">14</div>
<div class="deadline_time">23:20:51</div>
<div style="clear:both;"></div>
</div>
</div>
</div>
</div>
</div>
我的页面上有很多这样的容器。
答案 0 :(得分:0)
我解决了这个问题 实际上它不是jQuery动画或javascript setInterval()问题,它是Google Chrome本身。
我试过了:
正如philipp所说,我将第一个代码更改为setTimeout()
我将.live()更改为$(document).on('mouseover','。someDivClass',function(){...});
但这一切都没有解决问题,所以在这里和那里测试我优化了我网站上的图像,它就解决了!
我认为会发生什么:
Chrome在LARGE图像上渲染具有不透明背景的动画div时出现问题,因为当我使.background类图像变小时,动画延迟消失了。
我测试了我在Firefox 15.0.1开头的代码,并没有任何延迟。
无论如何,谢谢你的答案,我不再有动画问题了