《js动画效果》之透明度动画


js

学习资源来自慕课网《js动画效果》:http://www.imooc.com/learn/167。

例子:初始透明度值为30,鼠标移上改变物体的透明度到100,鼠标移出模块区域将透明度由100变为30

刚开始我没想通为什么要那么复杂将其也用定时器来实现,鼠标移上时,直接将透明度的值设为100,移出时设为30就好了呀。后来比较了两种做法(采用定时器和不采用定时器)我才发现,我忽略了一个重要的现象,采用定时器才能更好的展示物体变化的过程,如图-1所示,而不用定时器,直接从将物体透明度从一个值变成另一个值,虽然简单,但是视觉上给人的感觉太突兀,因为变化太快了,如图-2所示,对于用户体验来说不好。老师把课程标题命名为”透明度动画“而不是”透明度变化“,看来是有理由的呀。



图-1 物体透明度”动画“(采用setInterval()实现)



图-2 物体透明度”变化“


此例也属于匀速运动类型,其匀速改变的是物体的透明度, 练习代码如下:

  1. <!DOCTYPE HTML>  
  2. <html>  
  3.     <head>  
  4.         <meta charset="utf-8">  
  5.         <style type="text/css">  
  6.         *{  
  7.             padding:0;  
  8.             margin:0;  
  9.         }  
  10.         #box{  
  11.             width:200px;  
  12.             height:200px;  
  13.             background:red;  
  14.             filter:alpha(opacity:30);  
  15.             opacity:0.3;  
  16.         }  
  17.       
  18.         </style>  
  19.         <script type="text/javascript">  
  20.   
  21.           /*window.onload = function(){  
  22.             var divElem = document.getElementById("box");  
  23.             divElem.onmouseover = function(){  
  24.                 divElem.style.filter = "100";  
  25.                 divElem.style.opacity = 1 ;  
  26.             };  
  27.             divElem.onmouseout = function(){  
  28.                 divElem.style.filter = "30";  
  29.                 divElem.style.opacity = 0.3 ;  
  30.             }  
  31.           }*/  
  32.   
  33.         //使用定时器可以使动画达到更好的效果,突出透明度渐变的过程,可让变化不显得那么突兀  
  34.         window.onload = function(){  
  35.             var divElem = document.getElementById("box");  
  36.             divElem.onmouseover = function(){  
  37.                 changeOpacity(100);  
  38.             };  
  39.             divElem.onmouseout = function(){  
  40.                 changeOpacity(30);  
  41.             }  
  42.         }  
  43.   
  44.         var timer = null;  
  45.         var opacityValue = 30;  
  46.         function changeOpacity(value){  
  47.             var divElem = document.getElementById("box");  
  48.             clearInterval(timer);  
  49.               
  50.             timer = setInterval(function(){  
  51.                 var speed = 0;  
  52.                 if(opacityValue > value){  
  53.                     speed = -10;  
  54.                 }else{  
  55.                     speed = 10;  
  56.                 }  
  57.                 if(opacityValue == value){  
  58.                     clearInterval(timer);  
  59.                 }else{  
  60.                     opacityValue += speed;  
  61.   
  62.                     //兼容浏览器  
  63.                     divElem.style.filter = "alpha(opacity:"+opacityValue+")";  
  64.                     divElem.style.opacity = opacityValue/100 ;  
  65.                 }  
  66.   
  67.             },100);  
  68.         }  
  69.         </script>  
  70.     </head>  
  71.     <body>  
  72.         <div id="box"></div>  
  73.     </body>  
  74. </html>  

小结:

通过 本例子的练习,我对匀速动画有了更好的理解,匀速动画的关键是改变 left, top, height, width, opacity的值,采用定时器setInterval()来实现。在合适的场景运用好动画,可以让用户体验更佳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值