Как отключить якорный переход при загрузке страницы

Когда я посещаю my_site.com/page.php#somethingпозиция прокрутки - это элемент, содержащий этот конкретный хэштег, а не верхнюю часть страницы.

проведение window.scrollTo(0, 0); не меняет этот факт. Что может тогда?

РЕДАКТИРОВАТЬ: также попытался принять принятый ответ из Как отключить якорь "прыжок" при загрузке страницы?, Кажется, больше не работает.

2 ответа

Что вам нужно сделать, это сохранить хэш-тег для последующего использования, а затем удалить его, чтобы в браузере не было чего прокручивать.

Важно, чтобы вы не помещали эту часть кода в функции $() или $(window).load(), как это было бы поздно, и браузер уже перешел на тег.

// store the hash (DON'T put this code inside the $() function, it has to be executed 
// right away before the browser can start scrolling!
var target = window.location.hash,
    target = target.replace('#', '');

// delete hash so the page won't scroll to it
window.location.hash = "";

// now whenever you are ready do whatever you want
// (in this case I use jQuery to scroll to the tag after the page has loaded)
$(window).load(function() {
    if (target) {
        $('html, body').animate({
            scrollTop: $("#" + target).offset().top
        }, 700, 'swing', function () {});
    }
});

Имея этот HTML-код:

<a href="#test">link</a>
<div id="test"></div>

Вы можете избежать прокрутки к элементу div и вместо этого прокрутить до верхней части окна, используя этот код:

$("a").on("click", function(e) {
    e.preventDefault();
    window.scrollTo(0, 0);
});

РЕДАКТИРОВАТЬ:

Вы можете попробовать добавить это:

var firstVisit = true;
$(window).scroll(function() {
    if (firstVisit) {
        window.scrollTo(0, 0);
        firstVisit = false;
    }
});
Другие вопросы по тегам