大块吃肉188
2016-09-01 09:35
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>链式动画</title> <style type="text/css"> *{margin:0;padding:0;} ul,li{ list-style:none; } ul li{ width:200px; height:100px; background:yellow; margin-bottom:20px; border:4px solid #000; filter:alpha(opacity=30); opacity:0.3; } </style> <script src="move.js"></script> </head> <body> <ul> <li id="li1"></li> </ul> <script type="text/javascript"> var Li=document.getElementById('li1'); Li.addEventListener('mouseover',function(){startMove(Li,'width',400);},false); Li.addEventListener('mouseover',function(){startMove(Li,'height',200);},false); Li.addEventListener('mouseover',function(){startMove(Li,'opacity',100);},false); </script> </body> </html>
接下来是引入的js部分
function getStyle(obj,attr){//传入两个参数:对象和属性 if (obj.currentStyle) { //currentStyle针对ie浏览器 return obj.currentStyle[attr]; } else { //getComputerStyle针对firefox浏览器 return getComputedStyle(obj,false)[attr]; } } // var timer=null; function startMove(obj,attr,iTarget,fn){ // clearInterval(obj.timer); obj.timer=setInterval(function(){ //1、取当前的值 var icur=0; if (attr=='opacity') { icur=Math.round(parseFloat(getStyle(obj,attr))*100); //*100是为了和17行代码中的透明度对应 } else { icur=parseInt(getStyle(obj,attr)); } //2、计算速度 var speed=(iTarget-icur)/8; speed=speed>0?Math.ceil(speed):Math.floor(speed); //3、检测停止 if (icur==iTarget) { clearInterval(obj.timer); if (fn) { fn(); } } else { if (attr=='opacity') { obj.style.filter='alpha(opacity='+(icur+speed)+')';//针对ie浏览器 obj.style.opacity=(icur+speed)/100;//针对firefox和chrome浏览器的 } else { // obj.style.width=icur+speed+'px'; obj.style[attr]=icur+speed+'px'; } } },30) }
分别给li添加mouseover事件后,后一个li里面的startMove()里面的clearInterval()会清除上一个li的startMove()函数里的定时器,所以就只有最后一个有效果了
关于js部分第10行,清楚定时器,为什么要注释掉才有效果,如果不注释掉,只有透明度的变化,想不明白
JS动画效果
113925 学习 · 1443 问题
相似问题