首先,您不需要使用旧的<a name=
约定。查看 w3schools 上的锚点页面 w3schools 上的HTML 锚点。最佳实践是现在通过 id 链接容器元素。
因此,如果您要链接到包含某些内容的 div,请使用<div id="linkToMe">My content in here.</div>
and <a href="#linkToMe">The link text</a>
。
这当然会破坏您的上述代码,因为它正在按名称查找元素。您想通过 id 查找它们(无论如何更快!)。
在我的网页中,我在顶部有一个工具栏,有时position: fixed;
当我滚动时我想偏移滚动位置,这样它就不会在页面顶部的工具栏下方。
我就是这样做的:
function goToByScroll(id) {
//Find toolbar height
var pageOffset = 0,
hdr = $('#sub'),
tb = $('#sitemenu');
if (hdr.css('position') == 'fixed') { pageOffset += hdr.height() }
if (tb.css('position') == 'fixed') { pageOffset += tb.height() }
//Scroll the document
$('html,body').animate({ scrollTop: $("#" + id).offset().top - pageOffset }, 'slow'); }
然后用 jQuery 连接起来:
$(".jumptoid").click(function (e) {
e.preventDefault();
// Track in google analytics if you are using it.
_gaq.push(['_trackEvent', 'Jump to Id', e.currentTarget.host, this.href, 0]);
// Scroll to item location using jquery
goToByScroll(this.href.split('#')[1]);
// Push History in browser bar so the forward/back button works
window.location.hash = this.href.split('#')[1];
return false;
});
如果目标元素的位置是固定的,这将完美地将目标元素的顶部与我的标题/工具栏的底部对齐,如果不是,则将它们与浏览器视口的顶部完美对齐。
在您的情况下,您要么想要更改计算偏移量的方式(而不是我hdr
和tb
项目,您可以做一些其他数学运算或查看其他页面元素),或者您可以使用@chris moutray 建议的自定义属性。
如果要使用属性,请使用建议的 html5 开头标准,data-
以便它通过验证。例如<div id="linkToMe" data-scroll-offset="250">My content here</div>
,然后使用@chris 的代码来获取该属性,例如$anchor.attr('data-scroll-offset')
.