2012-01-23 3 views
45

Я разрабатываю веб-страницу, где в зависимости от следующих или обратных действий я делаю корреспондентскую анимацию, проблема возникает при использовании pushstate. Когда я получаю событие, как узнать, был ли пользователь щелкнуть назад или переслать кнопки истории с помощью Pushstate API? Или мне нужно что-то реализовать?Как я могу получить, если событие popstate происходит от действий назад или вперед с помощью pushstate HTML5?

+0

Событие popstate говорит: «Пожалуйста, измените это состояние». Похоже, он предполагает, что вы знаете, в каком состоянии вы сейчас находитесь, и что вам нужно сделать, чтобы изменить состояние. – Neil

+0

Проблема в том, что история представляет собой стек, поэтому, если у меня есть список, и я иду вперед, вперед, вперед, назад, вперед, назад, вперед, а список: [1,2,3,4,5] , история будет: [1,2,3,4,3,4,3,4]. В цифрах легко, но с URL-адресами не так просто узнать, какой URL-адрес следующий, а какой предыдущий. – Davsket

+0

Комментарий bennedich ниже помог мне много. Возможно, было бы хорошо принять его, чтобы он более эффективно помогал другим. –

ответ

51

Вы должны реализовать его самостоятельно, что довольно легко.

  • При вызове pushState предоставить объекту данных уникальный инкремент id (uid).
  • При вызове обработчика onpopstate; проверьте состояние uid на постоянную переменную, содержащую последнее состояние uid.
  • Обновить постоянную переменную с текущим текущим состоянием.
  • Выполняйте различные действия в зависимости от того, было ли состояние uid больше или меньше последнего состояния uid.
+11

Это хорошо работает, когда иерархия страницы/представления четко определена, и всегда верно, что определенная страница появляется за другой. Когда навигация может быть более динамичной, вы не можете полагаться на инкрементный UID. Я решил это, используя sessionStorage, чтобы поддерживать стек последних X-страниц. Затем, в событии popstate, вы можете проверить стек из sessionStorage, чтобы узнать, совпадает ли новый URL-адрес страницы с URL-адресом страницы N-2. Используйте sessionStorage вместо обычной переменной, поэтому это сохраняется между границами страниц. – frontendbeauty

+12

@frontendbeauty Я думаю, что вы должны опубликовать свое предложение в качестве ответа с фрагментом кода. – andi

+1

Кроме того, вместо того, чтобы проверять, больше ли значение/меньше, вы можете написать менеджер изменений состояния, который проверяет идентификатор, чтобы узнать, что такое текущее состояние и какое состояние оно перемещается, затем выполните соответствующую анимацию. –

 Смежные вопросы

  • Нет связанных вопросов^_^