本文实例讲述了JS运动特效之任意值添加运动的方法。分享给大家供大家参考,具体如下:
回顾一下上个例子JS实现多物体运动的方法:
<script> window.onload = function(){ var liTags = document.getElementsByTagName('li'); for(var i=0;i<liTags.length;i++){ liTags[i].timer = null;// 给每个li都添加一个timer liTags[i].onmouseover = function () { startMove(this,400); } liTags[i].onmouseout = function () { startMove(this,200); } } } function getStyle(obj,attr){ return getComputedStyle ? getComputedStyle(obj,false)[attr] : obj.currentStyle[attr]; } function startMove(obj,iTarget) { clearInterval(obj.timer); obj.timer = setInterval(function () { var objWidth = parseInt(getStyle(obj,'width'));//因为是通过[]调用属性,所以width必须加单引号 // var iSpeed = (iTarget -obj.offsetWidth)/10; // 因为objWidth存放的就是当前对象的宽,所以直接写objWidth而不是obj.objWidth var iSpeed = (iTarget -objWidth)/10; iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed); if(objWidth == iTarget){ clearInterval(obj.timer); }else{ obj.style.width = objWidth+iSpeed+'px'; } },30); } </script>
如果此时需求有变化,让第2个li鼠标移入,高度变化,第三个li鼠标依然边框,第四个li鼠标移入背景变化。一种办法就是复制几分startMove函数,分别把之前width变化改成height,borderWidht,和opacity透明度变化;但是这样显然浪费,可以把他们合并成一个函数,把变化的属性作为参数传进去就好了.
1. function startMove(obj,attr,iTarget) 函数里新增attr参数
2. 调用参数的方式:由obj.style.属性名 变成 obj.style[属性名]
3. 需要分别为每个li添加事件
<script> window.onload = function(){ var liTags = document.getElementsByTagName('li'); for(var i=0;i<liTags.length;i++){ liTags[i].timer = null;// 给每个li都添加一个timer liTags[0].onmouseover = function () { startMove(this,'width',400); } liTags[0].onmouseout = function () { startMove(this,'width',200); } liTags[1].onmouseover = function () { startMove(this,'height',100); } liTags[1].onmouseout = function () { startMove(this,'height',50); } liTags[2].onmouseover = function () { startMove(this,'borderWidth',10); } liTags[2].onmouseout = function () { startMove(this,'borderWidth',2); } liTags[3].onmouseover = function () { startMove(this,'padding',10); } liTags[3].onmouseout = function () { startMove(this,'padding',0); } } } function getStyle(obj,attr){ return getComputedStyle ? getComputedStyle(obj,false)[attr] : obj.currentStyle[attr]; } function startMove(obj,attr,iTarget) {//attr:把变化的属性最为参数传入 clearInterval(obj.timer); obj.timer = setInterval(function () { var objAttr = parseInt(getStyle(obj,attr)); var iSpeed = (iTarget -objAttr)/10; iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed); if(objAttr == iTarget){ clearInterval(obj.timer); }else{ //obj.style.width = objWidth+iSpeed+'px'; obj.style[attr] = objAttr+iSpeed+'px';// 需要又.属性名的形式改成[] } },30); } </script>
内容版权声明:除非注明,否则皆为本站原创文章。