Я сделал какой-то скрипт, чтобы сделать обратный отсчет на моем сайте, он зацикливается на всех классах крайних сроков и меняет часы.
Вот код
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 с оверлеем, оверлейная анимация замирает, пока обратный отсчет не отсчитывает одну секунду. Иногда кажется, что анимации нет, а просто внезапно появляется наложение. Иногда выглядит неплохо, все зависит от того, в какой момент я наведу курсор на 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);
}
);
Эта анимация работает плавно, несмотря ни на что!
Так что это может быть функция live (мне она нужна, когда я добавляю контент на страницу с помощью AJAX) или анимация непрозрачности на фоне анимации фона (может быть дороже с точки зрения процессора)
Любая помощь будет оценена, спасибо.
Изменить
Вот мой 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>
У меня на страничке много таких контейнеров.
setInterval
? Ой. - person Bergi   schedule 08.11.2012.deadline_container
(содержащие.deadline_days
и.deadline_time
s) связаны с.someDivClass
элементами с их накладками и с#top_bar
и#top_bar_container
??? - person Bergi   schedule 08.11.2012