make jQuery scrollTop, чтобы не оставлять историю браузера

Ищу решение, которое заставит scrollTop не оставлять записей в истории браузера.

Когда я впервые запускаю страницу, я хотел, чтобы браузер перешел к определенному ее разделу, если URL-адрес имеет параметр с внутренним именем привязки. поэтому я делаю это:

$('html,body').animate(
{
    scrollTop: $(".section[tagname='"+url_tagname+"']").offset().top
},
'slow');

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

Есть ли способ заставить scrolltop не оставлять историю навигации?


person AnKing    schedule 06.03.2015    source источник
comment
scrolltop не добавляет запись в историю браузера. Ваша проблема наверняка исходит откуда-то еще, или я не понимаю вашу проблему. Может быть, вы могли бы предоставить онлайн-ссылку, где это поведение можно проверить.   -  person A. Wolff    schedule 06.03.2015
comment
Где вы вызываете эту функцию? Вы нажимаете на якорь с href="# или подобным? Это onload/onhashchange?   -  person Alvaro Montoro    schedule 06.03.2015
comment
Я понял, в чем моя проблема, scrolltop ничего не добавил в историю, однако, когда я пытался изменить URL-адрес (удалить номер раздела), я сделал: window.location.hash =; это фактически добавило шаг к истории браузера. Мне все еще нужно очистить URL-адрес после прокрутки.   -  person AnKing    schedule 06.03.2015


Ответы (1)


Вы не хотите, чтобы страница сохраняла ссылку #anchor при нажатии на ту же страницу, верно?

Используйте прослушиватель и предотвратите действие ссылки по умолчанию.

$('a').on('click', function(event) {
    event.preventDefault();
    event.stopPropagation();
});

Это избавит вас от нескольких одинаковых страниц в истории, но у вас все еще будет тег #anchor в URL-адресе при переходе с другой страницы.

Редактировать: Фактический ответ был предоставлен мной в комментариях: «Вы хотите переписать URL-адрес? Ваш вопрос был больше связан с тегами привязки. Если вы хотите изменить URL-адрес, используйте: window.history.replaceState(). https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history"

person thepratt    schedule 06.03.2015
comment
Я хочу, чтобы привязка была удалена из ссылки (location.hash), не оставляя шага в истории. Является ли это возможным? - person AnKing; 06.03.2015
comment
Вы хотите переписать URL? Ваш вопрос больше касался якорных тегов. Если вы хотите изменить URL-адрес, используйте: window.history.replaceState(). developer.mozilla.org/en-US/docs/ Интернет/Руководство/API/DOM/ - person thepratt; 06.03.2015