Показать сообщение отдельно
  #20 (permalink)  
Старый 18.05.2015, 16:35
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Готовый кусок действующего вещества

/* 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.

Второй вопрос. Похоже что когда окно свернуто, браузер, по крайней мере ФФ, лепит там таймаут на таймаут почем зря, в результате чего когда окно распахиваешь, происходит легкая паника среди блоков и движение приобретает калечный характер. Я добавил парочку событий на фокус-размытие окна, но эти штуки заведомо не везде работают и вообще работают неуверенно.

Как сделать анимацию чтоб он четко отрабатывала, не допуская ингресса таймаутов? Я видел где-то пример, там надо дату вводить, потом считать, поскольку тема есть, попробую на халяву получить ответ, спасибо.
Ответить с цитированием