zoukankan      html  css  js  c++  java
  • 导航栏筋斗云

    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);
            }
     
        }
  • 相关阅读:
    09 Django组件之用户认证组件
    二叉树的三种遍历(非递归)
    CoderForce 141C-Queue (贪心+构造)
    CoderForce 140C-New Year Snowmen(贪心)
    UVA-1663 Purifying Machine (最大匹配数)
    UVA-10801 Lift Hopping (最短路)
    UVA-1660 Cable TV Network (最小割)
    UVA-820 Internet Bandwidth (最大流)
    UVA-1336 Fixing the Great Wall(区间DP)
    棋盘分割(二维区间DP)
  • 原文地址:https://www.cnblogs.com/zard23/p/9153803.html
Copyright © 2011-2022 走看看