js動畫學習(三)

來源:互聯網
上載者:User
五、多物體變寬



這裡面要注意由於物體變多了,需要給每個物體各配備一個定時器,否則如果只有一個定時器的話,當滑鼠在不同物體之間快速滑動時,不同的物體就會出現爭搶的現象。所以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;//Firefox和Google         }     }, 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;/*Firefox和Google*/     } </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動畫學習(三)的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.