我的问题如下:在我的网站上,我希望我的锚链接能够顺利滚动到它们链接到的ID。有很多线程可以解决这个问题,但我只能在jsfiddle示例项目中使用这些https://jsfiddle.net/7fcvkwf0/16/
$("a").each(function(index, element){
$(this).click(function(e) {
if (this.hash != "" && $(this).attr("href").charAt(0)=="#"){
e.preventDefault();
var id = $(this).attr("href");
$('html, body').animate(
{scrollTop: $(id).offset().top},
1000,
"swing",
function(){
console.log("done");
});
window.location.hash = id;
}
});
});
是我用来使动画流畅的功能。我不知道为什么,但我在我自己的主页上使用完全相同的代码,但它似乎不起作用,因为它立即跳转到锚链接。控制台日志在1000毫秒(1秒)后出现。不幸的是我不能告诉你这个问题因为我无法在jsfiddle中重现它(我不知道为什么)。
这可能有所帮助。我认为这与事件的结合有关。特别是对我来说,我有异步页面加载,基本上动态添加锚点,因此在添加到dom后,prevent不会绑定到动态加载的元素。
$(document).on('click', 'a', function(e) {
if (this.hash !== "") {
e.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top-150
}, 500);
}
});
从另一个线程......
除非使用on()将事件委托给父元素或文档,否则事件不会与动态添加的元素绑定。您必须使用不同的on形式进行事件委派。
Original post这对我有用,虽然它因为我无法弄清楚的原因而杀死哈希。但滚动工作一致。