Сохранять расположение прокрутки при переходе с другой страницы через браузер «назад» или по обратной ссылке?

#php #ajax #navigation #scroll #state

#php #ajax #навигация #прокрутка #состояние

Вопрос:

У меня возникли некоторые проблемы с сохранением расположения полос прокрутки.

Фон
У меня есть горизонтальный браузер изображений на одной из моих страниц. Он лениво загружает свои изображения, поэтому потенциально может прокручивать тысячи изображений. При нажатии на каждое изображение вы попадаете на страницу сведений с увеличенным изображением и некоторыми метаданными. С этой страницы вы также можете перемещаться непосредственно по другим страницам сведений в том же порядке, в каком вы видели их в скроллере.

редактировать: уточняющий
Есть страница с HTML-элементом с overflow: auto и полосой прокрутки. Содержимое этого элемента очень, очень длинное. Когда вы уходите, а затем возвращаетесь на эту страницу, я бы хотел, чтобы полоса прокрутки запоминала последнее место, на которое вы смотрели.

Цель
Что я хотел бы сделать, так это разрешить пользователю возвращаться на страницу с помощью скроллера без его повторного возврата к началу скроллера каждый раз. Если вы используете кнопку браузера «Назад», то это работает автоматически, но когда вы используете мою явную ссылку обратно на результаты поиска / просмотра, вы каждый раз начинаете с начала. (Кроме того, кнопка браузера «Назад» становится менее выполнимой, когда пользователи переходят со страницы сведений на страницу сведений несколько раз, насколько это возможно.)

Подходы, которых следует избегать
Моя предыдущая попытка отправила форму между всеми страницами, которые сохранили местоположение скроллера в переменной $ _POST, но затем, когда вы хотите использовать кнопку «Назад», вы получаете это раздражающее всплывающее окно с просьбой подтвердить, поэтому я хочу держаться подальше от этого.

Я также не хочу помещать это в объект $ _GET, так как это повлияет на SEO страниц, поскольку несколько URL-адресов указывают на одну и ту же страницу.

Вопрос
Как вы думаете, какой лучший способ реализовать это?

  • Должен ли я использовать некоторые хитрости с window.history?
  • Должен ли я отправлять AJAX-запрос с указанием местоположения прокрутки скрипту, который сохранит значение в объекте $ _SESSION?
  • Что-то еще?

Заранее спасибо за ваши предложения.

-K

Комментарии:

1. Все это сбивает с толку, если вы хотите сохранить позиции прокрутки, почему бы не создать разделы и не перейти к этому разделу старым способом?

2. я не понимаю вашего комментария. Создавать разделы? … Нравится подкачка?

3. Пожалуйста, взгляните на эту статью: htmlgoodies.com/tutorials/getting_started/article.php/3479511 /…

4. поэтому используйте теги привязки на странице. это работает, если оно находится в элементе с overflow: auto? Я не хочу, чтобы переходила вся страница, только этот элемент, который прокручивается горизонтально.

5. Это должно. Хотя я это не тестировал.

Ответ №1:

Решение, которое я в конечном итоге использовал, состояло в том, чтобы установить session var с уникальным идентификатором элемента на каждой странице сведений, затем прочитать этот session var на странице просмотра и использовать смещения для прокрутки непосредственно к элементу, который был последним просмотрен на странице сведений.