【发布时间】:2013-10-18 15:50:55
【问题描述】:
我目前在我的 wordpress 页面上使用“平滑滚动”,并且我试图让页面从我想要的外部链接(使用锚点(#portfolio)从那里平滑滚动到请求的部分从顶部开始的页面,然后滚动到投资组合部分。
发生的情况是它会短暂显示“投资组合部分”(锚点跳转),然后重置到顶部并向下滚动。
代码
$(function() {
$('.menu li a').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$root.animate({
scrollTop: target.offset().top - 75
}, 800, 'swing');
return false;
}
}
});
});
页面加载
$(window).on("load", function() {
if (location.hash) { // do the test straight away
window.scrollTo(0, 0); // execute it straight away
setTimeout(function() {
window.scrollTo(0, 0); // run it a bit later also for browser compatibility
}, 1);
}
var urlHash = window.location.href.split("#")[1];
if (urlHash && $('#' + urlHash).length)
$('html,body').animate({
scrollTop: $('#' + urlHash).offset().top - 75
}, 800, 'swing');
});
如何防止页面加载时出现的“跳跃”?
HTML - 导航链接(使用虚拟链接)
<a href="link.com/#portfolio>portfolio</a>
HTML - div
<div id="portfolio></div>
【问题讨论】:
-
设置的超时使其在其他代码触发后跳转到顶部...
-
问题是
link.com/#portfolio对浏览器有意义——在这个位置打开。您无法更改浏览器,因此它在此位置启动,然后运行您的 jovascript。 -
嗨,霍根,我以前见过这种做法。显然它不是使用我正在做的方法完成的,还有这个吗?我的谷歌整个早上都让我失望了。是否有一些我缺少的工作?感谢您回答我的问题。
-
如果这是我能做到的最好的,请告诉我。我只是想确保没有其他选择。
-
在页面加载时根据 location.hash 跳转到元素是默认浏览器行为,我认为您无法覆盖它。
标签: javascript jquery html