首页 > 作文

教你做个可爱的css滑动导航条

更新时间:2023-04-03 21:04:47 阅读: 评论:0

嘿!大家好哇,今天来带大家做一个可爱的滑动导航栏效果,这个demo很基础,但是使用场景非常广泛噢 :happy: !作为前端大白,今天就手把手一步一步教你实现它吧!️

实现效果

看!这个滑动的效果很有趣吧!这样的滑动效果相信你一定有想过吧!

实现过程

1. 前期准备

虽然这个控件很小,功能也不是很多,但我们还是需要先分析一下它的结构,以及实现的功能

鼠标移入对应的列表项,底部的线会滑到相应的位置

点击相应的列表项,背景滑块会切换到所选择的列表项

<div class="slipnav">    <nav>        <a href="javascript:;" class="lected">首页</a>        <a href="javascript:;">我的</a>        <a href="javascript:;">联系</a>        <a href="javascript:;">订阅</a>        <a href="javascript残组词:;">管理</a>        <a href="javascript:;">相册</a>        <!-- 底部线条 -->        <div class="line"></div>        <!-- 背景滑块 -->        <div class="bgc"></div>    </nav></div>

通过上面简单的分析,我们可以写出html结构,在基本列表项的基础上添加了一个线条和滑块:happy:

2. 使用css对导航条进行修饰

这部分很简单没有涉及什么难得属性,相信聪明可爱的你一定信手拈来:happy:

首先我们先对整个导航栏进行一些调整,给导航栏添加了背景颜色,同时添加一定的圆角,让整个导航栏看起来圆嘟嘟,由于后面内部的标签使用了浮动和定位,所以这里需要清除浮动噢!

.slipnav nav {    position: relative;    background-color: white;    border-radius: 50px;}.slipnav nav::after {    content: '';    display: block;    clear: both;}

tips:清除浮动的三件套要牢记噢!

接下来我们对每一个列表项进行美化吧!调整字体大小,行高使得文本状态最佳 ️ !

.slipnav a {    position: relative;    float: left;    width: 150px;    line-height: 50px;    text-align: center;    font-size: 18px;    color: #000;    z-index: 1;}

下面来对底部线条以及背景滑块进行加工吧,通过绝对定位的方式定位到默认选择文本的下方,背景滑块也是同理!

.line {    position: absolute;    top: 50px;    left: 35px;    /* 线的长宽 */    height: 3px;    width: 80px;    background-color: #54a0ff;    transition: all .3s;}.bgc {    position: absolute;    top: 0px;    left: 25px;    height: 50px;    width: 100px;    border-radius: 50px;    background-color: rgb(84, 126, 233);    transition: all .3s;}

3. 使用js来实现线条滑块的功能

在上面的美化过程中,我们对线条以及背景滑块采用了绝对定位,就是为了下面通过控制left值来控制它们的位置变化!下面就来实现吧!

实现功能:鼠标移入对应的列表项,底部的线会滑到相应的位置

由于导航条中的项目过多,在后面查找对应元素索引时会比较麻烦,所以我们先给所有的列表项添加一个自定义属性data-index来代表他们的索引

let slipall = document.querylectorall('.slipnav nav a');//给所有的a标签添加index属性,方便后面查找for (let i = 0; i < slipall.length; i++) {    slipall[i].tattribute('data-index', i)}

接下来我们通过监听鼠标移入的位置来计算线的left值,

这里通过事件委托来实现,通过获取触发事件的index属性来计算left值,当鼠标移出导航栏时,由于没有选择其他的项,所以线条需要回到原先被选中元素的位置

//鼠标移入底下的线跟着移动slipnav.addeventlistener('mouover', function (e) {    let target = e.target    let len = 150 * target.datat.index + 35;// 计算当前的left值    line.style.left = len + 'px';})//鼠标移出时底下的线回到原来的位置slipnav.addeventlistener('mouleave', function (e) {    let lected = document.querylector('.slipnav .lected')//原先被选中的元素    let len = 150 * lected.datat.index + 35 // 线回到被选择元素的位置    line.style.left = len + 'px'})

注意:由于在css代码中设置了过渡属性,所以在改变left值时,不会突变而是一个滑动过程噢!

实现功能:点击相应的列表项,背景滑块会切换到所选择的列表项

当我们鼠标点击列表项时,我们需要选中当前元素,背景块需要定位到当前位置!实现方法相同

//鼠标点击时背景颜色的滑块滑倒相应的位置slipnav.addeventlistener('click', function (e) {    let target = e.target;    let bgc = document.querylector('.bgc')    //排他思想    for (let i = 0; i < slipall.length; i++) {        slipall[i].classlist.remove('lected')    }    target.classlist.add('lected');// 通过添加类名实现颜色变化    let len = 150 * target.datat.index + 25 // 计算背景滑块left值    bgc.style.left = len + 'px';})

完整代码

需要代码可以直接复制噢!

<!doctype html><html lang="en"><head>    <meta chart="utf-8">    <meta http-equiv="x-ua-compatible" content="ie=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>document</title>    <style>        * {            margin: 0;            padding: 0;        }        body {            background-color: rgb(221, 230, 245);        }        a {            color: inherit;            text-decoration: none;        }        .slipnav {            width: 920px;            margin: 100px auto;        }        .slipnav a {            position: relative;            float: left;            width: 150px;            line-height: 50px;            text-align: center;            font-size: 18px;            color: #000;            z-index: 1;        }        .slipnav nav {            position: relative;            background-color: white;            border-radius: 50px;        }        .slipnav nav::af细胞ter {            content: '';            display: block;            clear: both;        }        .slipnav nav :hover {            color: #54a0ff;        }        .lected {            color: white !important;        }        .line {            position: absolute;            top: 50px;            left: 35px;            /* 线的长宽 */            height: 3px;            width: 80px;            background-color: #54a0ff;            transition: all .3s;        }        .bgc {            position: absolute;            top: 0px;            left: 25px;            /* 线的长宽 */            height: 50px;            width: 100px;            border-radius: 50px;            background-color: rgb(84, 126, 233);            transition: all .3s;        }    </style></head><body>    <div class="slipnav">        <nav>            <a href="javascript:;" class="lected">首页</a>            <a href="javascript:;">我的</a>            <a href大人六一适合发的朋友圈="javascript:;">联系</a>            <a href="javascript:;">订阅</a>            <a href="javascript:;">管理</a>            <a href="javascript:;">相册</a>            <!-- 底部线条 -->            <div class="line"></div>            <!-- 背景滑块 -->            <div class="bgc"></div>        </nav>    </div>    <script>        let line = document.querylector('.line');        let slipnav = document.querylector('.slipnav nav');        let slipall = document.querylectorall('.slipnav nav a');        //给所有的a标签添加index属性,方便后面查找        for (let i = 0; i < slipall.length; i++) {            slipall[i].tattribute('data-index', i)        }        //鼠标移入底下的线跟着移动        slipnav.addeventlistener('mouover', function (e) {            let target = e.target            let len = 感恩节是哪天150 * target.datat.index + 35;// 计算当前的left值            line.style.left = len + 'px';        })        //鼠标移出时底下的线回到原来的位置        slipnav.addeventlistener('mouleave', function (e) {            let lected = document.querylector('.slipnav .lected')            let len = 150 * lected.datat.index + 35 // 线回到被选择元素的位置            line.style.left = len + 'px'        })        //鼠乐于助人的同学标点击时背景颜色的滑块滑倒相应的位置        slipnav.addeventlistener('click', function (e) {            let target = e.target;            let bgc = document.querylector('.bgc')            //排他思想            for (let i = 0; i < slipall.length; i++) {                slipall[i].classlist.remove('lected')            }            target.classlist.add('lected');// 通过添加类名实现颜色变化            let len = 150 * target.datat.index + 25 // 计算背景滑块left值            bgc.style.left = len + 'px';        })    </script></body></html>

噢!完成了!以上就是本次demo的完整代码噢,感兴趣的你可以动手试试噢!相信一定会有所收获噢!

到此这篇关于教你做个可爱的css滑动导航条的文章就介绍到这了,更多相关css滑动导航条内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章,希望大家以后多多支持www.887551.com!

本文发布于:2023-04-03 21:04:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/490f0f28a70b7d0b2a6e9063c2c02e4f.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:教你做个可爱的css滑动导航条.doc

本文 PDF 下载地址:教你做个可爱的css滑动导航条.pdf

标签:滑块   背景   鼠标   位置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图