Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2013, 11:38
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

Остановить вложенный animete в метод progress в другом animate
Добрый день, Господа) Столкнулся с интересной проблемой, гугление пока не принесло результата. Так что с удовольствием выслушаю как решить проблему имеющегося кода, так и предложения альтернативных решений. Суть задачи следующая:
Пишу слайдер страничек. По нажатию на ссылку из-за правого края экрана вылетает блок с контентом новой открытой странички, как только она достигает края блока с текущим контентом он также начинает двигаться и улетает за левый край экрана. Эта часть задачки решена. Но нужно, чтобы по нажатию на кнопку браузера "назад" происходила обратная анимация. Вот тут возникла проблема. Далее приведу кусок кода, который все это делает:

$('#contentPanel2').animate({
				left: blockPosition.left+'px',
			},
			{
				duration: 6000,
				progress: function()
				{

					// animate second block
					var start_animate = 0;
					left = $('#contentPanel2').position().left;
					$('#infoPanel').css('z-index', 5001);
					if( left <= blockContact && start_animate == 0 )
					{
						start_animate = 1;
						$('#contentPanel').animate({
							left: leftBlockFinalPosition+'px'
						},{
							duration: 6000,
							complete: function()
							{
								alert('good');
							}
						});
					}
				},
				complete: function()
				{
					sectionJsCssRemove();
					$('#contentPanel2').attr({id:'tmpContentPanel'});  //remove();
					$('#contentPanel').attr({id:'contentPanel2'});
					$('#tmpContentPanel').attr({id:'contentPanel'});
					$('#contentPanel').removeClass('slidePanelOnMove');
					$('#contentPanel2').hide();
					postSlided = 1;
					createMapBlock();
				}
			});


На подмену атрибута id не смотрите, ибо это обусловлено особенностями css в текущем коде и будет отрефакторено после рефакторинга css, который делаю не я. Проблема возникла в следующем: Когда пытаюсь вызвать обратную анимацию по событию window.addEventListener('popstate', function(e){...},false); Продолжает отрабатываться содержимое callback-функции progress предыдущей анимации и css свойство left снова подменяется на значение leftBlockFinalPosition. Пытался костылить и с !important и снова инкреминировать свойство в callback complete первой анимации и все безрезультатно. В доке нет ничего насчет того как можно остановить выполнение progress. Может кто сталкивался? Или есть идеи как забиндить соприкосновение блоков без использования progress чтобы инициировать анимацию второго блока?

Сори за длинную портянку текста)))

Последний раз редактировалось rockerror, 01.07.2013 в 12:04.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2013, 12:12
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

P.S. Да, забыл сказать alert('good'); (в примере - 22 строка) срабатывает каждые несколько секунд.

Последний раз редактировалось rockerror, 01.07.2013 в 12:15.
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2013, 12:56
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

Решил проблему. Оказалось нужно всего-лишь добавить в кейс
complete: function(){
   ...
}

остановку анимации:

$('#contentPanel2').stop(true,true);
$('#contentPanel').stop(true,true);
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2013, 12:57
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

Можно тему закрывать. Не могу найти где это можно сделать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск