【问题标题】:Highlight menu style changes elements on scroll突出显示菜单样式在滚动时更改元素
【发布时间】:2020-03-07 20:52:02
【问题描述】:

我有一个由 5 个不同部分组成的单页网站,顶部有一个固定导航。在这个导航中,我有 5 个链接到页面的相应部分。单击时,它会平滑地向下滚动到该部分。我遇到的问题是活动课程。在页面的顶部,“关于”链接有一个活动类,它在链接的底部添加了一个粗边框。但是当我向下滚动到下一部分“骑行区域”时,我希望活动类将自己从“关于”中删除并将自己添加到“骑行区域”。

这是我的 HTML:

<div class="desktop-navbar">
    <img class="logo-desktop" src="img/logo-desktop.png">
    <div id="desktop-nav">
        <a href="#5">CONTACT</a>            
        <a href="#4">PRICING AND SERVICES</a>
        <a href="#3">FACILITY</a>
        <a href="#2">RIDING AREAS</a>
        <a href="#1" class="active">ABOUT</a>
    </div>
</div>

这是 CSS:

.desktop-navbar {
    display: block;
    width: 100%;
    height: 75px;
    background-color: white;
    box-shadow: 0 5px 60px rgba(0,0,0,0.15);
    position: fixed;
}
#desktop-nav a {
    float: right;
    display: block;
    color: black;
    text-align: center;
    padding-right: 14px;
    padding-left: 14px;
    padding-bottom: 5px;
    text-decoration: none;
    font-size: 16px;
    font-family: 'Chau Philomene One', sans-serif;
    margin-top: 43px;
    transition: 0.5s;
}
a.active {
    border-bottom: thick solid #F15B29;
}

我知道这可以使用 jQuery 来完成,但是我还没有找到适合我的方法,而且我对 JS 不是很流利,所以我不确定如何去做。

【问题讨论】:

  • Bootstrap Scrollspy 易于设置和使用。
  • @stackoverflowusrone 你知道我如何在不向我的网站添加 Bootstrap css 的情况下使用 ScrollSpy 吗?当我将 Bootstrap 链接添加到我的网站时,我的几乎所有样式都更改为 Bootstrap 样式..

标签: javascript jquery html css scroll


【解决方案1】:

在 vanilla JS 中,您可以将id 属性添加到每个&lt;a&gt; 标签,然后使用let elem = document.getElementById('your id') 查找特定链接。然后通过elem.classList.add/remove("class") 添加或删除必要的类。或者使用elem.classList.toggle("class") 切换类。

【讨论】:

    【解决方案2】:

    正如已经建议的那样,使用像 ScrollSpy 这样的插件会更容易,并且可以在响应式视图中提供更好的准确性,以照顾不同的视口。但这是我们可以使用 jQuery 做到的:

    $(document).ready(function () {
    var links=$('#desktop-nav a');
        $(document).on("scroll", onScroll);
        //Change Class when we load the pageUrl with an anchor hash ex : page.html#1
        var hash = window.location.hash;
            if(hash) {
            links.removeClass('active');
            $('#desktop-nav a[href="' + hash +'"]').addClass('active');
            $('html, body').animate({
                scrollTop: $(hash).offset().top + 'px'
            }, 1000, 'swing');
        }
        //Change The class OnClick
        $('a[href^="#"]').on('click', function (e) {
            e.preventDefault();
            $(document).off("scroll");
            
            links.removeClass('active');
            $(this).addClass('active');
          
            var target = this.hash,
                menu = target;
            $target = $(target);
            $('html, body').stop().animate({
                'scrollTop': $target.offset().top+2
            }, 500, 'swing');
        });
    });
    //Handle scrolling event
    function onScroll(event){
    var margin=75; //close to the sticky menu height here
    var links=$('#desktop-nav a');
        var scrollPos = $(document).scrollTop();
        links.each(function () {
            var currLink = $(this);
            var elm = $(currLink.attr("href"));
            //check if scrolling position is matching the active anchor id
            if ((elm.position().top)+margin <= scrollPos && elm.position().top + elm.height() > (scrollPos+margin)) {
                links.removeClass("active");
                currLink.addClass("active");
            }
        });
    }
    .desktop-navbar {
        display: block;
        width: 100%;
        height: 75px;
        background-color: white;
        box-shadow: 0 5px 60px rgba(0,0,0,0.15);
        position: fixed;
    }
    #desktop-nav a {
        float: right;
        display: block;
        color: black;
        text-align: center;
        padding-right: 14px;
        padding-left: 14px;
        padding-bottom: 5px;
        text-decoration: none;
        font-size: 16px;
        font-family: 'Chau Philomene One', sans-serif;
        margin-top: 43px;
        transition: 0.5s;
    }
    a.active {
        border-bottom: thick solid #F15B29;
    }
    section{padding-top:75px;}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="desktop-navbar">
        <img class="logo-desktop" src="img/logo-desktop.png">
        <div id="desktop-nav">
            <a href="#5">CONTACT</a>            
            <a href="#4">PRICING AND SERVICES</a>
            <a href="#3">FACILITY</a>
            <a href="#2">RIDING AREAS</a>
            <a href="#1" class="active">ABOUT</a>
        </div>
    </div>
    <section id="1">
    <h2>ABOUT US</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>
    <section id="2">
    <h2>Riding spots</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>
    <section id="3">
    <h2>Facility</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>
    <section id="4">
    <h2>Pricing and services</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>
    <section id="5">
    <h2>Contact Us</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>
    <section id="footer">
    <h2>Footer Links/widgets...</h2>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    <p>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</p>
    </section>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2016-08-17
      • 2019-08-10
      • 2015-02-21
      相关资源
      最近更新 更多