作为程序员一定要保持良好的睡眠,才能好编程

超级炫酷的menu背景移动

发布时间:2017-03-28

好今天就做这么一个效果:


当鼠标放在上面的时候,背景图片自动移动


menu.gif


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        div,ul,li{margin:0px;padding:0px;list-style:none;}
        #menu{
            width:600px;
            height:45px;
            margin:50px auto;
            position: relative;
        }
        #menu .bg,.m{
            width:120px;
            height:45px;
            background:#06f;
            position: absolute;
            left:0px;
            top:0px;
            z-index:8;
            border-radius:5px;
        }
        #menu ul{
            z-index:9;
            position: relative;
        }
        #menu ul li{
            width:120px;
            text-align:center;
            height:45px;
            line-height:45px;
            display:block;
            float: left;
        }
    </style>
    <script type="text/javascript" src="js/base.js"></script>
    <script type="text/javascript">
            window.onload=function(){
 
               var oUl=song("#menu ul li").hover(function(){
                    var _this=this;
                    song(".m").menuXLyd(_this.offsetLeft);
                },function(){
                    song(".m").menuXLyd(0);
                });
            }
    </script>
</head>
<body>
    <div id="menu">
        <div class="m" id="bg"></div>
        <ul>
            <li>首页</li>
            <li>关于我们</li>
            <li>新闻中心</li>
            <li>产品预览</li>
            <li>联系我们</li>
        </ul>
    </div>
</body>
</html>


看看js代码是如何实现的:



//专门为menu运动设置的

Base.prototype.menuXLyd=function(iTarget,fn){
    var oLeft=0;
    var ispeed=0;
    for(var i=0;i<this.elements.length;i++){
        _starMove(this.elements[i],iTarget,fn);
    }
    function _starMove(obj,iTarget,fn){
        clearInterval(obj.timer);
        obj.timer=setInterval(function(){
            ispeed+=(iTarget-obj.offsetLeft)/5;
            ispeed*=0.7;
            if(Math.abs(ispeed)<1 && Math.abs(iTarget-obj.offsetLeft)<1){
                clearInterval(obj.timer);
                obj.style.left=iTarget+"px";
                if(fn){fn();}
            }else{
                oLeft=obj.offsetLeft+ispeed;
                obj.style.left=oLeft+"px";
            }
        },30);
    };
}


专门写了这么一个方法,适用于左右移动:



实现原理:

    速度:加速定

    采用定时器的方法进行移动  

    那么停止的条件就是:

    速度足够小 不足以运动一个动画  and  距离target的位置小于1 这样就可以停止定时器了。

    

    否则:进行style的设置