Там в onhashchange
событие, но оно не может быть отменено надежно во всех браузерах, чтобы предотвратить прокрутку. Лучшим решением является запись положения прокрутки перед изменением местоположения хэша и последующим сбросом. Например, следующий код будет поймать нажмите на любую ссылку - это не остановить распространение - с HREF значением #
и предотвратить страницу от прокрутки по вертикали:
document.onclick = function (evt) {
var tgt = (evt && evt.target) || event.srcElement,
scr = document.body.scrollTop;
if (tgt.tagName == "A" && tgt.href.slice(-1) == "#") {
window.location.href = "#";
document.body.scrollTop = scr;
return false;
}
}
Если вы изменяете хэш через скрипт, вы можете использовать следующий код:
var scr = document.body.scrollTop;
window.location.href = '#';
document.body.scrollTop = scr;
Любой из этих методов может быть отрегулирован, чтобы избежать прокрутки отдельных элементов или горизонтально прокрутки страницы. Обратите внимание, что вы можетеremove the entire hash (включая #
), не вызывая навигации или прокрутки в современных браузерах, вызывая функции pushState
или replaceState
.
Вы можете назначить несуществующий якорь, но это на самом деле не «очищать» URL вверх: D – polarblau