2016-07-31 107 views
0

我有以下代码:如何为特定锚点设置偏移锚点函数?

function offsetAnchor() { 
    if(location.hash.length !== 0) { 
     window.scrollTo(window.scrollX, window.scrollY - 160); 
    } 
} 

     $(window).on("hashchange",offsetAnchor); 

     window.setTimeout(offsetAnchor, 1); 

,当我点击一个锚,它使我的锚-160像素,这是正确的。但是,我的页面上的每个锚点都需要特定的偏移量。

我该如何指定仅对某个锚点起作用的函数?有一种方法可以在一个函数内为多个锚点提供多个偏移量吗?

回答

0

什么重构的代码有点像这样:

var anchorDistanceMap = { 
    "someAnchor": -160, 
    "otherAnchor": -400 
}; 

function offsetAnchor(distance) { 
    if (location.hash.length !== 0) { 
     window.scrollTo(window.scrollX, window.scrollY - distance); 
    } 
} 

$(window).on("hashchange", function (e) { 
    window.setTimeout(function() { 
     offsetAnchor(anchorDistanceMap[location.hash]); 
    }, 1); 
}); 

然后你只需要编辑anchorDistanceMap对象,以表示必要每个锚的距离。

+0

谢谢,但我很难找出在“someAnchor”和“otherAnchor”位置输入什么。我是一个很大的JS新手。例如,这是我想抵消的其中一个链接的HTML。 ABOUT 让我知道你能否帮忙,谢谢。 – dillonjacobson12345

+0

该对象映射您要为页面上的每个锚点跳转(偏移)的距离。 –

+0

好吧,非常感谢,我得到了它的工作,但现在我有最后一个问题。假设我希望我的名为“otherAnchor”的锚可以免于此功能,并滚动到其在页面上的标准位置。我如何1:豁免“otherAnchor”从函数,或2:我输入到anchorDistanceMap为“otherAnchor”,使其转到其默认位置在页面上的值? – dillonjacobson12345