前些日子看了个视频所以就模仿它的技术来为大家做出几个简单的JS小特效
今天为大家做的是多个物体的运动效果,
1:HTML
<body>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</body>
2:css
<style type="text/css">
body,*{margin: 0;padding: 0;}
ul{list-style: none;}
ul li{width:300px;height: 100px;background: red;margin-top: 20px;}
</style>
3:javascript部分
<script type="text/javascript">
window.onload=function(){ //页面加载完毕执行匿名函数
var allLi=document.getElementsByTagName("li"); /*获取所有li标签*/
for(var i=0;i<allLi.length;i++){ /*遍历每个li并为每个li添加事件*/
allLi[i].timer; /*为每个li创建一个定时器容器*/
allLi[i].onmouseover=function(){
onOut(this,400); /*调用函数并把当前的li作为参数方便函数体调用当前li*/
}
allLi[i].onmouseout=function(){
onOut(this,300);
}
}
}
function onOut(that,width){
clearInterval(that.timer); /*每次函数被调用的时候都先清空一下定时器*/
that.timer=setInterval(function(){ /*函数调用时执行定时器 注意 这里我们为每个Li元素都定义了属于自己的一个定时器,防止了大家公用同一个定时器而造成的动画效果不一致问题*/
var speed=(width-that.offsetWidth)/5; /*定义变化的速度*/
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(that.offsetWidth==width){ /*到达目标宽度的时候删除定时器,防止无限变宽*/
clearInterval(that.timer);
}else{ that.style.width=that.offsetWidth+speed+"px";} /*把当前Li的宽度定义为当前Li的宽度+预先定义好的宽度*/
},10)
}
</script>
效果
现在我们改一个效果,多个物体的透明度变化
1:HTML
<body>
<div></div>
<div></div>
<div></div>
</body>
2:CSS
<style type="text/css">
body,*{margin: 0;padding: 0;}
div{width: 250px;height: 250px;float: left;margin: 5px;background: blue;filter:alpha(opacity:20);opacity:0.2 }
</style>
3:JS
<script type="text/javascript">
window.onload=function(){
var div=document.getElementsByTagName("div");
for(var i=0;i<div.length;i++){
div[i].onmouseover=function(){
onOut(this,100);
}
div[i].onmouseout=function(){
onOut(this,20);
}
div[i].opa=20; /*为每个div设置一个透明度的属性 值得注意的的是多物体的运动的多有变量都不能公用以防止资源争用*/
}
}
var timer;
function onOut(that,tar){
clearInterval(that.timer);
var speed;
that.timer=setInterval(function(){ /*为每个div创建自己的定时器*/
if(tar>that.opa){
speed=+10;
}else{
speed=-10;
}
if(that.opa==tar){
clearInterval(timer);
}
else{
that.opa+=speed;
that.style.opacity=that.opa/100;
that.style.filter="alpha(opacity:'+that.opa+')";
}
},20)
}
</script>
效果