2010-11-04 3 views
64

Как я могу установить и установить текущую позицию прокрутки веб-страницы?Как установить и установить текущую позицию прокрутки веб-страницы?

У меня длинная форма, которую необходимо обновить на основе действий пользователя/ввода. Когда это происходит, страница сбрасывается до самого верхнего уровня, что раздражает пользователей, потому что они должны прокручивать назад до точки, в которой они были.

Если бы я мог захватить текущую позицию прокрутки (в скрытом вводе) до перезагрузки страницы, я мог бы установить ее обратно после ее перезагрузки.

+0

Не является AJAX управляемой формы не лучший способ предотвратить эти эффекты (и, конечно, обеспечить запасной вариант в случае XHR недоступен)? У перезагрузок страницы будет страница, чтобы перейти на верх и обратно, причуда, которая может раздражать. –

ответ

42

Вы ищете недвижимость document.documentElement.scrollTop.

+0

спасибо, я нашел это: http://articles.sitepoint.com/article/javascript-from-scratch/6 и модифицировал 'getScrollingPosition()' для хранения значений в скрытых переменных. Затем в html обновленной страницы я использую ' xyz

+37

Я нахожу, что Chrome на Ubuntu не менее , что 'document.documentElement.scrollTop' всегда возвращается 0.' document.body.scrollTop', однако, похоже, работает. Один Firefox на Ubuntu, с другой стороны, обратный, верен - вы получаете 0 с 'body' и правильная сумма с 'documentElement'. Любая идея, что дает? – tobek

+1

Использование scrollX http://dev.w3.org/csswg/cssom-view/#dom-window-scrollx – Adria

5

Я пошел с решением HTML5 локального хранения ... Все мои ссылки вызвать функцию, которая устанавливает это перед меняющегося window.location:

localStorage.topper = document.body.scrollTop; 

и каждая страница имеет это в OnLoad тела:

if(localStorage.topper > 0){ 
    window.scrollTo(0,localStorage.topper); 
    } 
+2

Было бы более элегантно использовать setItem() и getItem() localStorage и вместо этого создавать резервную копию позиции прокрутки при каждом щелчке ссылки, сохранить ее один раз при выходе из страницы: window.addEventListener («beforeunload», function() {localStorage.setItem («scrolly», document.documentElement.scrollTop || document.body.scrollTop);}); – StanE

87

Принятая в настоящее время ответ неверен - document.documentElement.scrollTop всегда возвращает 0 Chrome. Это связано с тем, что WebKit использует body для отслеживания прокрутки, тогда как Firefox и IE используют html.

Чтобы получить текущую позицию, вы хотите:

document.documentElement.scrollTop || document.body.scrollTop 

Вы можете установить текущее положение 1000px вниз страницы, например, так:

document.documentElement.scrollTop = document.body.scrollTop = 1000; 

Или, с помощью JQuery (анимировать его, пока вы на нем!):

$("html, body").animate({ scrollTop: "1000px" }); 
+3

Ответ gyo, предлагающий 'window.pageYOffset' чище, если вы используете' window.scrollBy() 'или' window.scrollTo() 'методы. – igorsantos07

11

Есть некоторые несоответствия в том, как браузеры выставляют текущую координацию прокрутки окна Атес. Google Chrome на Mac и iOS Кажется, всегда возвращается 0 при использовании document.documentElement.scrollTop или jQuery's $(window).scrollTop().

Однако, он работает последовательно с:

// horizontal scrolling amount 
window.pageXOffset 

// vertical scrolling amount 
window.pageYOffset