耽误你一杯咖啡的时间,教你用JS实现粘性导航栏

1,888 阅读4分钟

前言

这回整点不一样的,每次都是写CSS,这次使用原生JS代码来实现粘性导航栏。粘性导航栏大伙肯定都有所了解,其实通过定位属性中的粘性定位sticky也是可以实现的。但是今天我们就是不走寻常路,使用原生JS来实现它。

效果预览

具体效果如下所示。

HTML部分

内容部分我们就像普通导航栏那样简单设计一下就行,相关结构如下所示。

<header>
        <a href="#" class="logo">Logo</a>
        <ul>
            <li><a href="#">首页</a></li>
            <li><a href="#">关于</a></li>
            <li><a href="#">服务</a></li>
            <li><a href="#">作品</a></li>
            <li><a href="#">联系</a></li> 
        </ul>
</header>

<header>HTML5中定义头部区域的标签,用于包含网站的标题、导航和其他相关内容。我们创建了一个网站的头部区域,其中包含了一个带有logo和一个无序列表。这是一个基本的头部结构,可以使用CSSJS进一步自定义和添加交互功能。

CSS部分

接下来这部分就是给导航栏添加相关样式,这里我们分为headerulli

header{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    transition: 0.6s;
    padding: 40px 100px;
    z-index: 2;
}

我们首先为header元素添加了一系列样式。将元素的定位设置为固定位置,使其固定在视窗上方,设置为弹性布局,以便进行弹性盒子布局。justify-content: space-between;表示在弹性布局中,将元素的子项在横轴方向上两端对齐,并通过在它们之间留出空白空间来实现平均分布。z-index: 2;:将元素的堆叠顺序设置为2,使其位于其他元素之上。

综上所述,这段代码为header元素定义了固定的定位和一些布局样式。它使用了弹性盒子布局来使元素的子项在水平方向上分散对齐,并且在样式变化时,过渡效果会以0.6秒的持续时间进行平滑过渡。

然后轮到为<header>元素内的特定元素(.logoullia)添加了一系列样式。

header .logo{
    position: relative;
    font-weight: 700;
    color: #fff;
    text-decoration: none;
    font-size: 2em;
    text-transform: uppercase;
    letter-spacing: 2px;
    transition: 0;
}
header ul{
  ......
}
header ul li{
   ......
}
header ul li a{
   ......
}

对于.logo的样式,它为.logo设置了字体样式、颜色、大小和转换等样式。对于ullia元素,设置了相对定位、对齐方式、装饰风格和过渡效果等样式。这样的样式设置一般用于网站的头部导航栏外观效果。

JS部分

CSS部分解决了,现在就轮到JS部分了。实现粘性导航栏的作用就是在于JS代码,通过JS实现像stikcy那样的粘性导航栏这样的交互效果。

  <script>
        window.addEventListener('scroll',()=>{
            let header = document.querySelector('header')
            header.classList.toggle('sticky',window.scrollY>0)
        })
    </script>

首先添加了一个滚动事件监听器,当发生滚动时,就会执行回调函数,用于监听滚动事件并在滚动时添加或移除样式类。这里使用了.classList.toggle()方法来添加或移除sticky类名。如果window.scrollY大于0,则添加sticky类名,否则就移除它。sticky 类名用于实现页面滚动时固定在顶部的效果。通过添加或移除sticky类名,可以触发相应的CSS样式,从而实现让<header>元素在页面滚动时固定在顶部的效果。

然后我们在这里添加一下相关的CSS样式。

header.sticky{
    padding: 5px 100px;
    background: #fff;
}
header.sticky ul li a{
    color: #000;
}

<header>元素具有sticky类名时应用该样式。具有sticky类名的<header>元素将具有更小的内边距,并且背景颜色将更改为白色。此外,链接文本的颜色也会从之前的白色变为黑色。通过这些样式更改,可以在<header>元素固定在顶部时,为其添加不同的外观和可读性。

总结

到这里整个过程的实现就结束了,整体而言并不难,很好理解,大家可以多去琢磨几遍,更详细的代码可以前往码上掘金查看,相信你可以对粘性定位以及粘性导航栏会有更好的理解。