我想鏈接到'平滑滾動'相同頁面上的相應ID位置,並且與上部具有50px的距離來自這個位置的邊界。平滑的滾動工作得很好,它似乎也滾動到上邊界的確切位置。然後突然(幾毫秒後)頁面跳轉到上邊界(就好像'.offset()。top - 50'被某些東西覆蓋)。這裏會發生什麼?如何解決這個問題?儘管使用.offset(),平滑滾動到目標ID的網站跳轉到了屏幕上邊界。top - 50
$(function() {
// Add smooth scrolling to all links
$("a").on('click', function(event) {
// Make sure this.hash has a value before overriding default behavior
if (this.hash !== "") {
// Prevent default anchor click behavior
event.preventDefault();
var hash = this.hash;
// 800 = milliseconds it takes to scroll; - 50 = vertical location
$('html, body').animate({
scrollTop: $(hash).offset().top - 50
}, 800, function(){
// Add hash (#) to URL when done scrolling (default click behavior)
window.location.hash = hash;
});
} // End if
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="nav-link" href="#about">About</a>
<div style="height: 2000px">testdiv before</div>
<p style="height: 100px" id="about">target text to scroll and stop 50px above upper border</p>
<div style="height: 2000px">testdiv after</div>
僅供參考我使用Chrome在1920px視寬,窗機。
似乎發生由於'window.location.hash =散列;'。 https://jsfiddle.net/nd9ot0k3/1/ –