导航栏筋斗云

Posted zard23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导航栏筋斗云相关的知识,希望对你有一定的参考价值。

css如下

*{
        padding: 0;
        margin: 0;
    }
    body{
        background-color: rgba(0, 0, 0, 0.6);
    }
    .box{
        width: 415px;
        height: 42px;
        margin: 200px auto;
        background-color: #fff;
        position: relative;
    }
    ul{
        list-style: none;
        position: relative;
    }
    li{
        float: left;
        width: 83px;
        height: 42px;
        text-align: center;
        font: 500 15px/42px "微软雅黑";
        cursor: pointer;
    }
    span{
        position: absolute;
        left: 0;
        top: 0;
        width: 83px;
        height: 42px;
        background-image: linear-gradient(to right,#03c03c 50% ,#51ee5d 100%);
    }

 

html如下

<div>
    <span></span>
    <ul>
        <li>菜单栏1</li>
        <li>菜单栏2</li>
        <li>菜单栏3</li>
        <li>菜单栏4</li>
        <li>菜单栏5</li>
    </ul>
</div>            

js如下

window.onload = function(){
        // 鼠标放在哪个li上面,span对应一道到哪里,移开后回到原位置
        var liArr = document.getElementsByTagName("li");
        var liWidth = liArr[0].offsetWidth;
        var span = document.getElementsByTagName("span")[0];
        // 计数器
        var cnt = 0;
 
        // for循环绑定事件
        for(var i=0; i<liArr.length; i++){
            // 自定义属性,然后绑定index属性为索引值
            liArr[i].index = i;
            // 鼠标进入事件
            liArr[i].onmouseover = function(){
                // 然span运动到该li的索引值位置
                animate(span, this.index*liWidth);
            }
            // 鼠标移开
            liArr[i].onmouseout = function(){
                // span运动到原位置
                animate(span, cnt*liWidth);
            }
            // 点击事件
            liArr[i].onclick = function(){
                // 计数器记录当前标签索引值
                cnt = this.index;
                animate(span, cnt*liWidth);
            }
        }
 
        // 缓动动画封装
        function animate(element, target){
            // 清除间歇调用
            clearInterval(element.timer);
            // 设置超时调用
            element.timer = setInterval(function(){
                // 设置步数
                var step = (target - element.offsetLeft)/10;
                // 调整步数
                step = step > 0 ? Math.ceil(step) : Math.floor(step);
                // 设置样式
                element.style.left = element.offsetLeft + step + "px";
                // console.log(1);
                if(Math.abs(target - element.offsetLeft) < Math.abs(step)){
                    element.style.left = target + "px";
                    clearInterval(element.timer);
                }
            }, 20);
        }
 
    }

 

以上是关于导航栏筋斗云的主要内容,如果未能解决你的问题,请参考以下文章

筋斗云效果(云朵在导航栏内随着鼠标移动)

使用底部导航栏防止片段刷新

通过底部导航栏更改片段时恢复片段状态

列表-筋斗云

在底部导航栏中保存片段状态

带有片段和底部导航栏的 Android FloatingActionButton