使用固定菜单调整锚定到其他页面

问题描述 投票:0回答:2

我正在一个网站上固定一个菜单。在主页上,我有一些标签应锚定到网站其他页面上的ID。这些ID的锚点工作正常,但是,其内容的顶部保留在固定菜单的后面。

我试图通过使用JavaScript动画方法并添加菜单的height值来解决它。当锚点的命运ID来自同一页面时,此方法效果很好。但这对我来说不起作用,因为我想从该网站转到另一个页面中的ID。

我的HTML

<a href="http://localhost/meu_site/psicologia#psicoterapia" class="psi-block-item"></a>

我的JavaScript

<script src="http://localhost/meu_site/js/jquery-3.4.1.min.js"></script>

$('.psi-block-item').click(function() {
    var target = $(this).attr("href")
    $("html, body").animate({ scrollTop: $(target).offset().top-100 }, 100)
})

显然,当从主页跳转到另一个页面时,似乎忽略了我的上一个js命令,而只是跟随href,将部分内容保留在固定菜单后面。

[我已经看到一些人建议使用伪CSS元素并将其隐藏以使其起作用,但我一直在寻找一种干净且更专业的解决方案,仅使用html和javascript。

谢谢你们。

javascript jquery html
2个回答
0
投票
$(document).load(function() {
    var target = this.location.href;
    $("html, body").animate({ scrollTop: $(target).offset().top-100 }, 100);
})

我不确定,但这应该是解决这个问题的逻辑...


0
投票

最有可能在执行代码之前重新加载页面。因此,我建议您在每个要查找哈希然后执行动画的页面上都包含一个窗口onload事件侦听器。

编辑:请查看@ nengak-dakup的答案。他的回答看起来不错。实现看起来像这样。

index.html

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Home</title>
</head>
<body>
    <header>
        <a href="page1.html#anchor1">Link to Page1 - Anchor 1</a>
        <a href="page1.html#anchor2">Link to Page1 - Anchor 2</a>
        <a href="page1.html#anchor3">Link to Page1 - Anchor 3</a>
    </header>
</body>

和page1.html

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Page1</title>
    <style type="text/css">
        header {
            position: fixed;
            top: 0px;
            left: 0px;
            width: 100%;
            height: 100px;
            background-color: grey;
            z-index: 5;
        }
        .box {
            position: relative;
            top: 100px;
            width: 100%;
            height: 800px;
        }
    </style>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <script type="text/javascript">
        $(document).load(function() {
            var target = this.location.href;
            $("html, body").animate({ scrollTop: $(target).offset().top-100 }, 100);
        })
    </script>
</head>
<body>
    <header>
        <a href="index.html">Back</a>
    </header>
    <div id="anchor1" class="box" style="background-color: blue"></div>
    <div id="anchor2" class="box" style="background-color: green"></div>
    <div id="anchor3" class="box" style="background-color: red"></div>
</body>

© www.soinside.com 2019 - 2024. All rights reserved.