Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2014, 17:27
Новичок на форуме
Отправить личное сообщение для Dionid Посмотреть профиль Найти все сообщения от Dionid
 
Регистрация: 11.06.2014
Сообщений: 9

Редирект после анимации
Задача следующая:
После нажатия на одну из ссылок (3 ссылки, имеющие общий класс ".links" и каждая свой href) должна произойти анимация блока box (<div class="box">), а после должен произойти редирект на значение href ссылки, на которую был произведен клик. Сам box должен вернутся в прежнюю позицию.
Пока нашел способ прописать направление ссылки через атрибут value
Мой код примерно такой:
HTML
<ul>
	<li><a class="links" href="#" value="www/A.html">TEXT</a></li>
	<li><a class="links" href="#" value="www/A.html">TEXT</a></li>
	<li><a class="links" href="#">TEXT</a></li>
</ul>
<div class="box" id="box"></div>

JS
$('.links').click(function(){
    $('#box').animate({"left": "-10"},1000, function(){
      var n = document.getElementsByClassName('links');
      document.location = n.value
  })
    $('#box').animate({"left": "значение прежней позиции"}, 5000)
});

Проблемы:
1) Происходит анимация, а после происходит редирект на значение undefined (впринципе, я это ожидал). Значит, нужен способ получить ссылку через другой атрибут, но какой, если href переводит на другую страницу до окончания анимации?
2) Эта функция выводит атрибут всех ссылок, а в моем случае нужно лишь той, на которую был произведен клик
3) Нужно после завершения анимации вернуть box в обратную позицию. Возможно ли сделать это без добавления строчки $('#box').animate({"left": "значение прежней позиции"}, 5000)
P.S.
Я понимаю, что код некорректен и есть возможность реализовать это по-другому, но пока я не имею достаточных знаний в Js и Jq, а запросы в гугле не вывели нужного результата

Последний раз редактировалось Dionid, 11.06.2014 в 17:45.
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2014, 17:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Dionid
var n = document.getElementsByClassName('links');
долго смотрим на красную букву -- это для медитаци чего в супе нехватает.

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 11.06.2014, 17:42
Новичок на форуме
Отправить личное сообщение для Dionid Посмотреть профиль Найти все сообщения от Dionid
 
Регистрация: 11.06.2014
Сообщений: 9

Нашел частичный ответ:
1) Создаю функцию, которая производит анимацию, а далее переводит на определенную ссылку:
function animredic() {
  $('#box').animate({'left': '100px'},1000, function(){
    document.location="www/A.html";
    });
  };

2) После присвоил атрибуту href функцию:
<a class="links" href="JavaScript:animredic()">TEXT</a>

Результат:
Теперь при нажатии на ссылку происходит перехож на нужную страницу после анимации
Оставшиеся проблемы:
1)Вернуть box в исходную позицию (возврат должен проиходить, что бы при следующем попадании на страницу блок не оставался на месте, куда он переместился при первом использовании функции)(понимаю, что пишу слишком запутано)
2) Эта функция не универсальна: приходится каждой ссылке присваивать свое значение href и каждый раз прописывать новую функцию анимации и перехода

Последний раз редактировалось Dionid, 11.06.2014 в 17:45.
Ответить с цитированием
  #4 (permalink)  
Старый 11.06.2014, 17:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Dionid, вернуть href
клик по ссылке -- отмена события event.preventDefault()-- var link = this ;сохранение самой ссылки для передачи
в callback анимации
function(){
document.location = link.href

}
Ответить с цитированием
  #5 (permalink)  
Старый 11.06.2014, 18:06
Новичок на форуме
Отправить личное сообщение для Dionid Посмотреть профиль Найти все сообщения от Dionid
 
Регистрация: 11.06.2014
Сообщений: 9

Премного благодарен.
Конечный код:
JS
$('.links').click(function(event){
      event = event || window.event 
      event.preventDefault ? event.preventDefault() : (event.returnValue=false);
      var link = this.href
      $('#box').animate({"left": "10"}, 1000, function(){
        document.location = link
      });
    });

HTML
<a class="links" href="www/A.thml">TEXT</a>

Осталась одна проблема: как вернуть блок обратно на место, поскольку при нажатии кнопки "назад", блок остается там, куда его перенесли, но, думаю, я сам с этим справлюсь

Последний раз редактировалось Dionid, 11.06.2014 в 18:12.
Ответить с цитированием
  #6 (permalink)  
Старый 11.06.2014, 18:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Dionid,
вариант ...
$('.links').click(function(event){
      event.preventDefault();
      var link = this.href,box = $('#box'), left = box.css('left');
      box.animate({"left": "10"}, 1000, function(){
        box.css({left : left});
        document.location = link
      });
    });
Ответить с цитированием
  #7 (permalink)  
Старый 11.06.2014, 19:36
Новичок на форуме
Отправить личное сообщение для Dionid Посмотреть профиль Найти все сообщения от Dionid
 
Регистрация: 11.06.2014
Сообщений: 9

Еще раз благодарю. Собственно это тени, которые при открытии страницы уезжают налево, при переходе на другую наезжают на страницу. Вот как я реализовал:
HTML
<a class="links" href="www/A.html">TEXT</a>
<div class="box" id="box"></div>
<div class="boxret" id="boxret"></div>

CSS
.box {
	width: 100%;
	height: 110%;
	background-color: black;
	position: fixed;
	top: 0;
	right: -105%;
	-webkit-box-shadow: -50px 0px 105px 50px rgba(0, 0, 0, 1);
	-moz-box-shadow:    -50px 0px 105px 50px rgba(0, 0, 0, 1);
	box-shadow:         -50px 0px 105px 50px rgba(0, 0, 0, 1);
}

.boxret {
	width: 100%;
	height: 110%;
	background-color: black;
	position: fixed;
	top: 0;
	left: 0%;
	-webkit-box-shadow: 50px 0px 105px 50px rgba(0, 0, 0, 1);
	-moz-box-shadow:    50px 0px 105px 50px rgba(0, 0, 0, 1);
	box-shadow:         50px 0px 105px 50px rgba(0, 0, 0, 1);
}

JS
$('.links').click(function(event){
      event = event || window.event 
      event.preventDefault ? event.preventDefault() : (event.returnValue=false);
      var link = this.href
      $('#box').animate({"right": "0%"}, 1200, function(){
        document.location = link
      });
      $('#box').animate({"right": "-105%"}, 1200)
    });

    $(document).ready(function(){
      $('#boxret').animate({"left": "-105%"}, 1200)
    });
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Начало анимации с места предыдущей анимации FanAizu (X)HTML/CSS 3 21.03.2014 12:39
Возврат значения функции после завершения анимации (затухания) grego jQuery 5 16.04.2013 22:25
jquery анимация и редирект после SunYang Events/DOM/Window 5 17.05.2012 12:10
Выполнить функцию после окончания всей анимации De-Luxis jQuery 2 24.11.2011 17:11
После анимации очистить очередь virtus jQuery 2 19.12.2009 11:35