Готовый кусок действующего вещества
/* calc curr and move block */
move=function(j){
i=j||i;
curr+=i;
if(curr==max || curr==0)
i=-i;
render();
m.style.top=(curr*-step)+'px';
},
/* next - previous click */
move_n=function(e){
move(1);
},
move_p=function(e){
move(-1);
},
/* animation */
stop=function(e){
if(to){
W.clearTimeout(to);
to=false;
}
},
go=function(e){
to=W.setTimeout(move,delay);
},
go_n=function(e){
if(to!==false)
go(e);
},
/* direct click */
go_to=function(e){
if(e.target.nodeName='I'){
curr=parseInt(e.target.getAttribute('data-index'))-i;
move();
if(curr==max)
i=-1;
else if(curr==0)
i=1;
}
};
if(total>1){
btn_n.addEventListener('click',move_n);
btn_p.addEventListener('click',move_p);
btn_b.addEventListener('click',go_to);
p.addEventListener('mouseenter',stop);
p.addEventListener('mouseleave',go);
m.addEventListener('transitionend',go_n);
W.addEventListener('focus',go);
W.addEventListener('blur',stop);
}
Щелчок с пуговиц - ну это знаете такие кнопки произвольного доступа к блокам - меня достал. Как только щелкаешь по крайним, индикатор i инвертируется и анимация тупо шарашит в заданном направлении, то есть показывает то, чего уже нет. Пришлось ввести дополнительную проверку, не считая предыскажения, чтоб посылать все на один и тот же move.
Второй вопрос. Похоже что когда окно свернуто, браузер, по крайней мере ФФ, лепит там таймаут на таймаут почем зря, в результате чего когда окно распахиваешь, происходит легкая паника среди блоков и движение приобретает калечный характер. Я добавил парочку событий на фокус-размытие окна, но эти штуки заведомо не везде работают и вообще работают неуверенно.
Как сделать анимацию чтоб он четко отрабатывала, не допуская ингресса таймаутов? Я видел где-то пример, там надо дату вводить, потом считать, поскольку тема есть, попробую на халяву получить ответ, спасибо.