2013-09-04 4 views
10

Есть ли способ отключить поведение, когда некоторые современные браузеры (Chrome и Safari) запоминают вашу позицию прокрутки на странице обновления?Отключить автоматическую прокрутку броузера после обновления страницы?

+0

Почему вы хотите сделать это? Хороший пользовательский интерфейс должен вернуться к этой позиции. – putvande

+0

@putvande 100% согласен в большинстве случаев, но в случае использования большой таблицы данных, которая добавляет новые данные в верхнюю часть, и хотя мы можем динамически обновлять данные, если пользователь по какой-то причине обновляется, мы надеваем Не хочу возвращать их в свою прежнюю позицию прокрутки. Это не ожидаемое поведение с их точки зрения, учитывая этот опыт - также это всего лишь один случай использования, есть и другие, которые существуют. – Anthony

+1

Любая страница, использующая бесконечный прокрутки для загрузки, будет иметь эту (неожиданную) проблему. –

ответ

17

Для браузеров, которые поддерживают history.scrollRestoration поведение автопрокрутка может быть отключена:

if ('scrollRestoration' in history) { 
    history.scrollRestoration = 'manual'; 
} 

Источник: https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration

+0

Поскольку это все еще экспериментальное свойство, кто-нибудь знает поддержку браузера? –

1

не только для хром, но и для всех я думаю, что это будет работать хорошо.

window.onload = function() { 
    window.scrollTo(0, 0); 
}; 

После обновления вашего вопроса:

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

+5

Это тоже была моя мысль - но мне не повезло с таким обратным вызовом - кажется, что хром делает автопрокрутку после того, как он заряжается. – Anthony

3

Вы пытались выстрелить после того, как документ готов?

$(document).ready(function(){ 
    window.scrollTo(0, 0); 
}); 

, если это не работает ...

$(document).ready(function(){ 
    setTimeout(function(){ 
     window.scrollTo(0, 0); 
    }, 1); 
}); 

Какой будет толкать это к нижней части стека вызовов

0

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

var scrollToYPos = 100; 
var interval = setInterval(checkPos, 0); 

function checkPos() { 
    if ($(window).scrollTop() == scrollToYPos) { 
     clearInterval(interval); 
    } else { 
     window.scrollTo(0, scrollToYPos); 
     checkPos();    
    } 
}  
0

Я столкнулся с этой же проблемой. Вот основное решение, которое я придумал:

 // scroll the user to the comments section if we need to 
     wt = win.scrollTop(); 
     wb = wt + win.height(); 
     // if scroll position is 0, do this (it's a fresh user), otherwise 
     // the browser is likely to resume the user's scroll position, in 
     // which case we don't want to do this 
     yab.loaded().done(function() { 
     // it seems that browsers (consistently) set the scroll position after 
     // page load. Accordingly wait a 1/4 second (I haven't tested this to the lowest 
     // possible timeout) before triggering our logic 
     setTimeout(function() { 
      // if the window top is 0, scroll the user, otherwise the browser restored 
      // the users scroll position (I realize this fails if the users scroll position was 0) 
      if(wt === 0) { 
      p = self.container.offset().top; 
      if(wb != p) { 
       win.scrollTop(p - th - 20);   
      } 
      }    
     }, 250); 
     }); 
+0

О, и 'yab.loaded' - это обещание, которое разрешается после загрузки окна. Эквивалент '$ (window) .load (function() {// ...});' – Skone

-3

Я думаю, что самый простой способ будет обмануть браузер в перезаряжания, что он думает, что это новая страница.

window.location = window.location 

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

Смежные вопросы