Javascript 滚动到具有不同偏移的锚点

Javascript 滚动到具有不同偏移的锚点,javascript,Javascript,我的网站顶部有一个浮动导航条,我使用下面的代码滚动到各个div锚定点 <script type="text/javascript"> $(document).ready(function () { $('a[href^="#"]').on('click', function (e) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body

我的网站顶部有一个浮动导航条,我使用下面的代码滚动到各个
div
锚定点

<script type="text/javascript">
$(document).ready(function () {
$('a[href^="#"]').on('click', function (e) {
    e.preventDefault();

    var target = this.hash,
        $target = $(target);

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top - 100 // floatnav height
    }, 900, 'swing', function () {
        window.location.hash = '1' + target;
    });
});
});
</script>

$(文档).ready(函数(){
$('a[href^=“#“]”)。关于('click',函数(e){
e、 预防默认值();
var target=this.hash,
$target=$(target);
$('html,body').stop().animate({
'scrollTop':$target.offset().top-100//floatnav高度
},900,“摆动”,功能(){
window.location.hash='1'+目标;
});
});
});

我希望能够使偏移量根据锚点的不同而有所不同。其中一些是不需要偏移的整页图像,因为导航栏后面实际上没有任何内容丢失,而另一些是以文本开头的,因此导航栏需要位于它们上面,这样它就不会隐藏内容。

您可以将每个部分的偏移量存储在目标定位点的属性中,如:

示例

然后,您可以从单击处理程序中访问此属性,如下所示:

var offset=$(目标).attr('data-offset')


然后,您所需要做的就是从元素的偏移量中减去额外的偏移量。

将它们分别放在各自的
s中,然后给它们适当的
填充顶部
,并使用
边距顶部
,以取消额外的填充。这不会在页面上创建大的空白空间吗?“使用一个
边距顶部
来取消额外的填充”我不确定在上面的代码中将var offset=$(target).attr('data-offset')放在哪里才能让它工作。@定义$target之后,ChrisTraverse就可以了。然后可以在jQuery动画方法中这样减去offset:$target.offset().top-offsetThis是我想的,但它似乎不起作用。我知道我们都在同一个波长上。这是添加的代码,默认偏移量设置为零。每个链接都指向零,尽管第二个链接的手动偏移量为100。JSFIDLE有一些问题-我已经整理好了,包括jQuery和添加了e偏移减法: