好今天就做这么一个效果:
当鼠标放在上面的时候,背景图片自动移动

<!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的设置