Я прочитал много связанных потоков, но ни один из них, похоже, не дает решения.
То, что я пытаюсь сделать, это разумно обработать полосу прокрутки в моем приложении Backbone.js. Как и многие другие, у меня есть несколько хэш-маршрутов #mypage. Некоторые из этих маршрутов являются иерархическими. например У меня есть страница #list, в которой перечислены некоторые элементы, я нажимаю на элемент в списке. Затем открывается страница # view/ITEMID.
Мои страницы имеют общий контент-контент в макете HTML. При изменении навигации я добавляю новый div, представляющий представление для этого маршрута, в Content div, заменяя все, что было до этого.
Итак, теперь моя проблема:
Если элемент находится далеко в списке, мне, возможно, придется прокручивать его. Когда я нажимаю на нее, поведение по умолчанию "по умолчанию" заключается в том, что страница # view/ITEMID отображается в той же позиции прокрутки, что и в представлении #list. Крепление достаточно просто; просто добавьте $(document).scrollTop(0) всякий раз, когда вводится новое представление.
Проблема в том, что если я нажму кнопку "Назад", я бы хотел вернуться к представлению #list в позиции прокрутки, которая была ранее.
Я попытался принять очевидное решение. Сохранение карты маршрутов для прокрутки позиций в памяти. Я пишу на эту карту в начале обработчика события hashchange, но до того, как новое представление фактически будет помещено в DOM. Я прочитал с карты в конце обработчика hashchange после того, как новое представление находится в DOM.
Что я замечаю, так это то, что что-то, где-то в Firefox, прокручивает страницу как часть события hashchange, так что к моменту, когда будет вызван код для записи в карту, у документа есть положение прокрутки, которое явно не было сделано пользователем.
Кто-нибудь знает, как это исправить, или наилучшей практикой, которую я должен использовать вместо этого?
Я дважды проверял, и в моем DOM нет привязанных тегов, которые соответствуют хешам, которые я использую.