学习资源来自慕课网《js动画效果》:http://www.imooc.com/learn/167。
例子:初始透明度值为30,鼠标移上改变物体的透明度到100,鼠标移出模块区域将透明度由100变为30
刚开始我没想通为什么要那么复杂将其也用定时器来实现,鼠标移上时,直接将透明度的值设为100,移出时设为30就好了呀。后来比较了两种做法(采用定时器和不采用定时器)我才发现,我忽略了一个重要的现象,采用定时器才能更好的展示物体变化的过程,如图-1所示,而不用定时器,直接从将物体透明度从一个值变成另一个值,虽然简单,但是视觉上给人的感觉太突兀,因为变化太快了,如图-2所示,对于用户体验来说不好。老师把课程标题命名为”透明度动画“而不是”透明度变化“,看来是有理由的呀。
图-1 物体透明度”动画“(采用setInterval()实现)
图-2 物体透明度”变化“
此例也属于匀速运动类型,其匀速改变的是物体的透明度, 练习代码如下:
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta charset="utf-8">
- <style type="text/css">
- *{
- padding:0;
- margin:0;
- }
- #box{
- width:200px;
- height:200px;
- background:red;
- filter:alpha(opacity:30);
- opacity:0.3;
- }
- </style>
- <script type="text/javascript">
- /*window.onload = function(){
- var divElem = document.getElementById("box");
- divElem.onmouseover = function(){
- divElem.style.filter = "100";
- divElem.style.opacity = 1 ;
- };
- divElem.onmouseout = function(){
- divElem.style.filter = "30";
- divElem.style.opacity = 0.3 ;
- }
- }*/
- //使用定时器可以使动画达到更好的效果,突出透明度渐变的过程,可让变化不显得那么突兀
- window.onload = function(){
- var divElem = document.getElementById("box");
- divElem.onmouseover = function(){
- changeOpacity(100);
- };
- divElem.onmouseout = function(){
- changeOpacity(30);
- }
- }
- var timer = null;
- var opacityValue = 30;
- function changeOpacity(value){
- var divElem = document.getElementById("box");
- clearInterval(timer);
- timer = setInterval(function(){
- var speed = 0;
- if(opacityValue > value){
- speed = -10;
- }else{
- speed = 10;
- }
- if(opacityValue == value){
- clearInterval(timer);
- }else{
- opacityValue += speed;
- //兼容浏览器
- divElem.style.filter = "alpha(opacity:"+opacityValue+")";
- divElem.style.opacity = opacityValue/100 ;
- }
- },100);
- }
- </script>
- </head>
- <body>
- <div id="box"></div>
- </body>
- </html>
小结:
通过 本例子的练习,我对匀速动画有了更好的理解,匀速动画的关键是改变 left, top, height, width, opacity的值,采用定时器setInterval()来实现。在合适的场景运用好动画,可以让用户体验更佳。