Drakon
Новичок
Сохранение позиции скрола страницы при нажатии back и refresh
Собрал по частям код, который тупо сохраняет позицию каждого URL'а а потом при загрузке восстанавливает.
Нужно сделать чтоб восстанавливалось тока при нажатии refresh или back.
Вот код:
В принципе вижу тока 1 вариант: ловить клики на ссылки и удалять кукисы для этих ссылок перед загрузкой страницы.
Например, на сайте gazeta.ru это каким-то образом реализовано.
Собрал по частям код, который тупо сохраняет позицию каждого URL'а а потом при загрузке восстанавливает.
Нужно сделать чтоб восстанавливалось тока при нажатии refresh или back.
Вот код:
Код:
function getScrollXY()
{
var scrOfX = 0, scrOfY = 0;
if( typeof( window.pageYOffset ) == 'number' ) {
//Netscape compliant
scrOfY = window.pageYOffset;
scrOfX = window.pageXOffset;
} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
//DOM compliant
scrOfY = document.body.scrollTop;
scrOfX = document.body.scrollLeft;
} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
//IE6 standards compliant mode
scrOfY = document.documentElement.scrollTop;
scrOfX = document.documentElement.scrollLeft;
}
return [ scrOfX, scrOfY ];
}
function getCookie( name )
{
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ';', len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure )
{
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name+'='+escape( value ) +
( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
( ( path ) ? ';path=' + path : '' ) +
( ( domain ) ? ';domain=' + domain : '' ) +
( ( secure ) ? ';secure' : '' );
}
function deleteCookie( name, path, domain )
{
if ( getCookie( name ) ) document.cookie = name + '=' +
( ( path ) ? ';path=' + path : '') +
( ( domain ) ? ';domain=' + domain : '' ) +
';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
function update_scroll_data ()
{
var curScroll = getScrollXY();
setCookie( 'scroll_pos', curScroll[0] + ',' + curScroll[1],
7200, document.location.pathname, document.location.host);
}
function set_scroll_position ()
{
var scroll_pos = getCookie ('scroll_pos');
if (scroll_pos)
{
scroll_pos = scroll_pos.split (',');
window.scrollTo(scroll_pos[0], scroll_pos[1]);
}
}
window.onscroll = update_scroll_data;
window.onclick = update_scroll_data;
window.onkeypress = update_scroll_data;
window.onload = set_scroll_position;
Например, на сайте gazeta.ru это каким-то образом реализовано.