2016-01-27 2 views
0

Я использовал следующий код от this link, чтобы иметь гладкую страницу прокрутки, и обратный вызов, который делает, отображает имя якоря после прокрутки (я звоню обратный вызов из .animate):вернитесь к началу страницы с плавным прокруткой и именем привязки в url

$(function() { 
    $('a[href*=#]:not([href=#])').click(function(event) { 
     event.preventDefault(); 
     if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
     var target = $(this.hash); 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
     var hash = this.hash; // 'this' will not be in scope in callback 
     $('html,body').animate({ scrollTop: target.offset().top - 55}, 300, function() { 
     location.hash = hash; 
     }); 
     return false; 
     } 
     } 
     }); 

    //Executed on page load with URL containing an anchor tag. 
    if($(location.href.split("#")[1])) { 
    var target = $('#'+location.href.split("#")[1]); 
    if (target.length) { 
     var hash = this.hash; // 'this' will not be in scope in callback 
    $('html,body').animate({ scrollTop: target.offset().top - 55}, 300, function() { 
     location.hash = hash; 
     }); 
    return false; 
} 
} 
}); 

Моя проблема заключается в том, что я не знаю, как быть в состоянии вернуться к началу страницы, когда я нажимаю на кнопку назад браузер, то есть вернуться к предыдущему состоянию , Например, сначала я нахожусь на странице (http://example.com/index.html), затем я нажимаю на якорь, я прокручиваю до якоря и после того, как имя привязки установлено в URL (http://example.com/index.htm#anchor). Но если я нажму кнопку «Назад» браузера, я бы хотел, чтобы меня перенаправили в начало страницы. На данный момент, с вышеупомянутым сценарием, ничего не происходит.

Любая помощь приветствуется,

Благодаря

UPDATE:

После ответе Matthew Lymer «s, я сделал тесты, добавив:

$(document).ready(function(event) { 
     var target = window.location.href.split("#")[1]; 
     if (target.length) { 
     var hash = this.hash; // 'this' will not be in scope in callback 
     $('html,body').animate({ scrollTop: target.offset().top}, 300, function() { 
     location.hash = hash; 
     }); 
     return false; 
     } 

но одушевленные прокрутки в верхней части страницы (требуется, когда я нажимаю кнопку «Назад») не работает

Консольные напечатает:

Type Error: target is undefined 
+0

Что такое HTML кнопки? – Filipe

+0

кнопка - кнопка назад моего браузера – youpilat13

+0

Взгляните на эту функцию 'popstate', она выполняется при изменении URL-адреса. [Ссылка] (https://developer.mozilla.org/pt-BR/docs/Web/Events/popstate) – Filipe

ответ

0

Просто повторно использовать вашу функцию, но вместо OnClick, запускающие его только произойдет, когда документ будет готов;

$(document).ready(function(){ 
    ... 
}); 

Вместо того чтобы устанавливать значение цели быть $ (это) .hash, возьмите хэш часть URL с помощью

target = window.location.href.split("#"); 
target = target[1]; 
+0

спасибо, не могли бы вы поместить фрагмент кода, пожалуйста, я не эксперт по jQuery – youpilat13

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