新页面上的 JavaScript 加载将锚点移动到顶部固定元素下方

发布于 2024-11-10 07:44:25 字数 922 浏览 4 评论 0原文

我刚刚学习 javascript(字面意思),我有一些 JS(如下),可以将页面锚点从页面顶部向下移动 90 像素,以防止锚点的内容被固定的顶部元素重叠。当单击同一页面上的锚点链接时,效果非常好。

我遇到的问题是当我单击指向不同页面上的锚点的链接时。当新页面加载时,锚点会加载到页面顶部,并部分隐藏在固定顶部元素下方。

我怀疑我需要在每个页面上执行某种 onLoad 事件来检查锚点哈希,但我对此太陌生,无法弄清楚。

任何帮助表示赞赏,谢谢!

统计信息:我这样做是为了我公司的网络帮助。我们有大约 280 多个帮助页面和 2,500 个左右的锚点。我希望在包含或标头中添加一些 JS 能够解决我的问题。

注意:我使用的脚本是作为另一个 stackoverflow 问题的答案找到的,并进行了轻微修改。

$(function(){
  $('a[href*=#]').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) {
        var targetOffset = target.offset().top - 90;
        $('html,body').animate({scrollTop: targetOffset}, 1000);
        return false;
      }
    }
  });
});

I'm just learning javascript (literally) and I've got a bit of JS (below) that moves page anchors 90 pixels down from the top of the page, to prevent the contents of the anchor from being overlapped by a fixed top element. When clicking links to anchors on the same page, it works beautifully.

The problem I'm having is when I click a link that points to an anchor on a different page. When the new page loads, the anchor is loaded at the top of the page and is partially hidden underneath the fixed top element.

I suspect I need some sort of onLoad event on every page that checks for anchor hashes, but I'm too new to this to figure it out.

Any help is appreciated, thanks!

Statistical info: I'm doing this for my company's web help. We have about 280+ help pages and 2,500 or so anchors. I'm hoping that adding some JS to an include or header will solve my issue.

Note: The script I'm using I found as an answer to a different stackoverflow question and is lightly modified.

$(function(){
  $('a[href*=#]').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) {
        var targetOffset = target.offset().top - 90;
        $('html,body').animate({scrollTop: targetOffset}, 1000);
        return false;
      }
    }
  });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的影子我的梦 2024-11-17 07:44:25

这应该工作得很好。在 Firefox 和 Chrome 中测试。

$(function(){
  if(location.hash !== "") {
    window.scrollTo(0,window.pageYOffset-90);
  }
});

This should work pretty well. Tested in Firefox and Chrome.

$(function(){
  if(location.hash !== "") {
    window.scrollTo(0,window.pageYOffset-90);
  }
});
著墨染雨君画夕 2024-11-17 07:44:25

如果我理解正确的话;您希望此移动在页面加载时发生,而不仅仅是在单击链接时发生。如果是这种情况,您将需要使用each() 函数而不是click()。只需将 .click 替换为 .each ,页面加载后就会发生。另外,为了安全起见,请将 href 匹配项用双引号引起来。

  $('a[href*="#"]').each(function() {...

If I understand you correctly; you want this move to happen on page load and not just when a link is clicked. If that's the case, you will want to use the each() function instead of click(). Just replace .click with .each and it will happen once the page loads. Also, wrap your href match in double quotes to be safe.

  $('a[href*="#"]').each(function() {...
﹏雨一样淡蓝的深情 2024-11-17 07:44:25

我实际上用一些 CSS 解决了这个问题(我向所有锚点添加了一个类):

a.target
{
    position: relative;
    border-top: 90px solid transparent;
    background-clip: padding-box;
    margin: -100px 0 0;
}

a.target:before
{
    content: "";
    position: absolute;
    top: -90px;
    left: 0;
    right: 0;
    border-top: 2px solid #ccc;
}

I actually solved this with some CSS (I added a class to all my anchors):

a.target
{
    position: relative;
    border-top: 90px solid transparent;
    background-clip: padding-box;
    margin: -100px 0 0;
}

a.target:before
{
    content: "";
    position: absolute;
    top: -90px;
    left: 0;
    right: 0;
    border-top: 2px solid #ccc;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文