Как было предложено ранее, Microsoft Edge, похоже, не поддерживает должным образом функцию .hash, не вызывая некоторых негативных последствий, таких как восстановление функции плавной прокрутки. Чтобы обойти это, я решил использовать pushState
для браузеров, которые его поддерживали, что дало желаемый эффект.
HTML
<!DOCTYPE HTML>
<html lang="en">
<head></head>
<body id="home">
<nav><a href="#section1">Section #1</a></nav>
<main>
<!-- INSERT A BUNCH OF <BR> TAGS -->
<h2 id="section1">section1</h2>
<!-- INSERT A BUNCH OF <BR> TAGS -->
</main>
</body>
</html>
CSS
nav {
position: fixed;
padding: 4px;
border: 2px solid #000;
width: 100%;
line-height: 2.25em;
background-color: yellow;
}
h2 {
padding: 4px;
border: 1px solid #000;
width: 100%;
line-height: 100px;
background-color: red;
}
JAVASCRIPT
$('a[href*="#"]').click(function(event) {
var href = $(this.hash);
if (href.length) {
event.preventDefault();
$('html, body').animate({
scrollTop: href.offset().top - 100
}, 750, function() {
if (history.pushState) {
history.pushState(null, null, 'index.html#' + href.attr('id'));
} else {
location.hash = href.attr('id');
}
});
}
});
Мне не удалось понять, как динамически извлекать имя вызывающего файла, например, index.html или main.html, чтобы динамически генерировать хешированный URL-адрес, чтобы его пришлось обновлять на странице. В противном случае, это работает именно так, как я ожидал. Смотрите рабочий пример JSFiddle .