Перезагрузка браузера не сбрасывает страницу вверх

Я подумал, когда вы нажали «Обновить», что браузер должен был сбросить вашу страницу вверх? Я использую аккордеон js, и когда я обновляюсь, он закрывает аккордеон, но не перемещает страницу вверх.

http://imip.rvadv.com/index3.html


person imakeitpretty    schedule 14.07.2012    source источник
comment
Ничего общего с Javascript, это работа браузера по умолчанию   -  person freefaller    schedule 14.07.2012
comment
Chrome не сбрасывает верхнюю часть прокрутки страницы, если вы обновите ее.   -  person Frank Fang    schedule 06.12.2013


Ответы (4)


Ну, как видите, это не так :)

Но вы можете заставить его использовать простой jQuery:

$(document).ready(function(){
    $(this).scrollTop(0);
});

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

Единственный способ, который работает в IE 9, FF 12 и Chrome 20.0, заключается в следующем:

$(document).ready(function(){
    $('html').animate({scrollTop:0}, 1);
    $('body').animate({scrollTop:0}, 1);
});

Странно то, что когда я пробовал прокручивать элементы напрямую, не применяя анимацию (то есть $('html').scrollTop(0)), это не сработало. Поскольку продолжительность установлена ​​на 1 миллисекунду, пользователь ничего не заметит.

Я был бы рад, если бы кто-нибудь мог пролить свет на это - почему прокрутка работает только с анимацией?

person Nikola Anusev    schedule 14.07.2012
comment
В IE9 я все еще наблюдаю скачок. Он прыгает наверх, а затем снова прыгает туда, где был вначале. Я бы хотел увидеть что-нибудь более плавное. Слайд наверх было бы неплохо, поскольку это то, что делает остальная часть моего аккордеона. - person imakeitpretty; 15.07.2012
comment
Мне кажется, в хроме "автопрокрутка" происходит при загрузке, а не при "готовности". - person commonpike; 26.02.2014
comment
И даже при загрузке я должен добавить его в очередь событий, чтобы прервать поведение браузера. Вы можете добавить его в очередь событий, используя setTimeout(...,0). Это может быть то, что делает ваш animate (). Итак $(window).on('load',function() {setTimeout(function () { $('html,body').scrollTop(0) },0); }); - person commonpike; 26.02.2014

Попробуйте это, если ничего из вышеперечисленного не помогло. Это заставит браузер думать, что он был вверху документа перед обновлением.

$(window).on('beforeunload', function() {
   $(window).scrollTop(0);
});
person Nikhil Nanjappa    schedule 16.03.2015

Для удобства браузер прокрутит вниз до того места, где вы были до перезагрузки. Это действительно полезно только для слишком длинных страниц.

Вы можете «исправить» это так:

window.onload = function() {document.body.scrollTop = document.documentElement.scrollTop = 0;};
person Niet the Dark Absol    schedule 14.07.2012
comment
Это работает в FF, но не в Chrome, а в IE работает слишком сильно. Вид экрана мерцает, прежде чем он будет выполнен правильно. - person imakeitpretty; 14.07.2012

На основании последнего комментария comonpyke и собственных тестов я рекомендую

$(document).ready(function(){
    $('html, body').scrollTop(0);

    $(window).on('load', function() {
    setTimeout(function(){
        $('html, body').scrollTop(0);
    }, 0);
 });
});
  • First scrollTop scrolls early
    • after document ready
  • Second scrollTop scrolls late
    • after load event
      • and after timeout
person user1680948    schedule 12.03.2015