Update April 2018: Jetzt gibt es eine einheimische Methode, dies zu tun :
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
Dies wird derzeit nur von den modernsten Browsern unterstützt.
Wenn Sie ältere Browser unterstützen, können Sie diese jQuery-Technik verwenden:
$(document).on('click', 'a[href^="#"]', function (event) {
event.preventDefault();
$('html, body').animate({
scrollTop: $($.attr(this, 'href')).offset().top
}, 500);
});
Und hier ist die Fiedel: http://jsfiddle.net/9SDLw/
Wenn Ihr Zielelement keine ID hat und Sie einen Link zu ihm über seine name
verwenden Sie dies:
$('a[href^="#"]').click(function () {
$('html, body').animate({
scrollTop: $('[name="' + $.attr(this, 'href').substr(1) + '"]').offset().top
}, 500);
return false;
});
Um die Leistung zu erhöhen, sollten Sie den Cache $('html, body')
Selektor, so dass es nicht zu einer jedes einzelne Mal ein Anker angeklickt wird:
var $root = $('html, body');
$('a[href^="#"]').click(function () {
$root.animate({
scrollTop: $( $.attr(this, 'href') ).offset().top
}, 500);
return false;
});
Wenn Sie möchten, dass die URL aktualisiert wird, tun Sie dies innerhalb der animate
Rückruf:
var $root = $('html, body');
$('a[href^="#"]').click(function() {
var href = $.attr(this, 'href');
$root.animate({
scrollTop: $(href).offset().top
}, 500, function () {
window.location.hash = href;
});
return false;
});