五、多物體變寬
這裡面要注意由於物體變多了,需要給每個物體各配備一個定時器,否則如果只有一個定時器的話,當滑鼠在不同物體之間快速滑動時,不同的物體就會出現爭搶的現象。所以timer前要加obj.
function changeWidth(obj,target) {//元素,目标值 clearInterval(obj.timer);//清除定时器防止嵌套调用 obj.timer=setInterval(function () {//设置定时器 var speed=(target-obj.offsetWidth)/8;//定义缓冲速度,目标值减当前值 speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度一定要取整 if (obj.offsetWidth==target) {//判断物体当前宽度和目标值的关系,如果达到目标清除定时器 clearInterval(obj.timer); } else { obj.style.width=obj.offsetWidth+speed+'px'; } },30) }
舉例:用3個li來舉例:
<style type="text/css"> *{ margin: 0; padding: 0; } ul li{ width: 200px; height: 100px; background: yellow; margin-bottom: 20px; } </style>
<script type="text/javascript"> window.onload=function(){ var ob=document.getElementsByTagName('li');//一共3个li for (var i = 0; i < ob.length; i++) { ob[i].timer=null;//避免鼠标在他们仨快速移动时他们竞争定时器 ob[i].onmouseover=function(){ changeWidth(this,400); } ob[i].onmouseout=function(){ changeWidth(this,200); } } } </script>
this參數指的就是物件自己。和前幾次不同的是這次的定時器清空要對每個li分別清空。
六、多物體變透明度
涉及到透明度就要注意瀏覽器的兼容性問題。還有,透明度的初始值不能像上一個單獨物體透明度初值那樣設定一個,多物體的透明度初始值要分別設置,每個物體都有初始值。
function changeOpacity(obj,speed,target) { clearInterval(obj.timer);//清除定时器,避免嵌套调用 obj.timer=setInterval(function () { if (obj.alpha==target) {//如果透明度达到目标值,清除定时器 clearInterval(obj.timer); } else {//当前透明度加上透明度变化的速度 obj.alpha=obj.alpha+speed; obj.style.filter='alpha(opacity:'+obj.alpha+')';//IE浏览器 obj.style.opacity=obj.alpha/100;//火狐和谷歌 } }, 30) }
下面用幾個div舉例子:
<style type="text/css"> *{ margin: 0; padding: 0; } div{ width: 200px; height: 200px; background: red; margin: 10px; float: left; filter: alpha(opacity:30);/*filter滤镜:不透明度,IE浏览器*/ opacity: 0.3;/*火狐和谷歌*/ } </style>
<div></div> <div></div> <div></div> <script type="text/javascript"> window.onload=function(){ var ob=document.getElementsByTagName('div'); for (var i = 0; i < ob.length; i++) { ob[i].timer=null; ob[i].alpha=30;//每一个的透明度初值要分开设置 ob[i].onmouseover=function(){ changeOpacity(this,10,100);//从30变到100 } ob[i].onmouseout=function(){ changeOpacity(this,-10,30);//从100变回30 } } } </script>
以上就是js動畫學習(三)的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!