На макете одной страницы с фиксированным верхним меню и привязной навигацией У меня есть «scrollspy» на месте, который изменяет идентификатор фрагмента на прокрутке, дает ссылку меню активному классу в зависимости от прокрутить позицию и оживить прокрутку к якорю с помощью Velocity.js.Изменение URL-адреса хэша на кнопке прокрутки и возврата назад
К сожалению, что бы он ни делал, при нажатии кнопки «Назад» браузера он проходит через все шаги прокрученного пути, то есть я загружаю сайт и прокручиваю вниз и вверх по крошечному биту, а затем часто нажимаю кнопку «Назад» в браузере также будет прокручиваться вниз и вверх, но не перейдет ни к последнему посещенному идентификатору, ни к предыдущей истории браузера.
// jQuery on DOM ready
// In-Page Scroll Animation with VelocityJS
// ------------------------------------------------ //
// https://john-dugan.com/fixed-headers-with-hash-links/
$('.menu-a').on('click', function(e) {
var hash = this.hash,
$hash = $(hash)
addHash = function() {
window.location.hash = hash;
};
$hash.velocity("scroll", { duration: 700, easing: [ .4, .21, .35, 1 ], complete: addHash });
e.preventDefault();
});
// ScrollSpy for Menu items and Fragment Identifier
// ------------------------------------------------ //
// https://jsfiddle.net/mekwall/up4nu/
$menuLink = $('.menu-a')
var lastId,
// Anchors corresponding to menu items
scrollItems = $menuLink.map(function(){
var item = $($(this).attr("href"));
if (item.length) { return item; }
});
$(window).scroll(function(){
// Get container scroll position
var fromTop = $(this).scrollTop()+ 30; // or the value for the #navigation height
// Get id of current scroll item
var cur = scrollItems.map(function(){
if ($(this).offset().top < fromTop)
return this;
});
// Get the id of the current element
cur = cur[cur.length-1];
var id = cur && cur.length ? cur[0].id : "";
if (lastId !== id) {
lastId = id;
// Set/remove active class
$menuLink
.parent().removeClass("active")
.end().filter("[href='#"+id+"']").parent().addClass("active");
}
// If supported by the browser we can also update the URL
// http://codepen.io/grayghostvisuals/pen/EtdwL
if (window.history && window.history.pushState) {
history.pushState("", document.title,'#'+id);
}
});
С выше коде следующее прекрасно работает:
Хэш или идентификатор фрагмента обновляется штраф при нажатии на ссылку меню с помощью VelocityJS для прокрутки анимации.
Активный класс присваивается соответствующей ссылке меню при прокрутке.
Идентификатор фрагмента также прекрасно обновляется при прокрутке, а не нажатии ссылки меню.
Вопрос
Часть 1: При прокрутке крошечную на скрипке, а затем нажмите кнопку назад, вы увидите, что полоса прокрутки «едет» точно так же, помня прокруткой, что было сделано.
Мне нужна кнопка для работы, как обычно. a) Вернитесь в историю браузера и вернитесь на страницу/сайт, на котором вы были, и b) при нажатии на ссылку привязки (i), а затем на ссылку привязки (ii), а затем на кнопку возврата назад, страница должна вернуться к якорная связь (i).
Часть 2: Поскольку history.pushState
не поддерживается в IE8 Я ищу способ использовать window.location.hash = $(this).attr('id');
вместо этого. Независимо от того, что я пытался в конце кода, я просто не могу получить window.location.hash = $(this).attr('id');
для работы. Я действительно не хочу использовать HistoryJS или что-то в этом роде, но мне интересно узнать это и написать сам.
Кроме того, что у меня есть кнопка с поломкой, все другое поведение, которое я хочу, уже существует, теперь мне просто нужно исправить поведение кнопки «Назад».
редактировать Я думаю, что я мог бы найти решение here, испытает и ответить подробно, если я получить эту работу.
Похожие:
smooth scrolling and get back button with popState on Firefox - need to click twice
jQuery in page back button scrolling
Modifying document.location.hash without page scrolling
How to Detect Browser Back Button event - Cross Browser
..и потому, что 'history.pushState' находится в функции' window.scroll', он подталкивает каждую новую позицию прокрутки, которая запускается через событие прокрутки в историю браузера. Мне удалось решить это с помощью другого подхода, но теперь я знаю ** ПОЧЕМУ ** это происходило. Теперь имеет смысл. Все еще исследуя, но представим мое решение, когда скрестили пальцы. – lowtechsun