zoukankan      html  css  js  c++  java
  • js动画学习(三)

    五、多物体变宽

     

          这里面要注意由于物体变多了,需要给每个物体各配备一个定时器,否则如果只有一个定时器的话,当鼠标在不同物体之间快速滑动时,不同的物体就会出现争抢的现象。所以timer前要加obj.

     1 function changeWidth(obj,target) {//元素,目标值
     2     clearInterval(obj.timer);//清除定时器防止嵌套调用
     3     obj.timer=setInterval(function () {//设置定时器
     4         var speed=(target-obj.offsetWidth)/8;//定义缓冲速度,目标值减当前值
     5         speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度一定要取整
     6         if (obj.offsetWidth==target) {//判断物体当前宽度和目标值的关系,如果达到目标清除定时器
     7             clearInterval(obj.timer);    
     8         } else {
     9             obj.style.width=obj.offsetWidth+speed+'px';
    10         }
    11     },30)
    12 }

          举例:用3个li来举例:

     1 <style type="text/css">
     2     *{
     3         margin: 0;
     4         padding: 0;
     5     }
     6     ul li{
     7         width: 200px;
     8         height: 100px;
     9         background: yellow;
    10         margin-bottom: 20px;
    11     }
    12 </style>
     1 <script type="text/javascript">
     2     window.onload=function(){
     3         var ob=document.getElementsByTagName('li');//一共3个li
     4         for (var i = 0; i < ob.length; i++) {
     5             ob[i].timer=null;//避免鼠标在他们仨快速移动时他们竞争定时器
     6             ob[i].onmouseover=function(){
     7                 changeWidth(this,400);
     8             }
     9             ob[i].onmouseout=function(){
    10                 changeWidth(this,200);
    11             }
    12         }
    13     }
    14 </script>

          this参数指的就是对象自己。和前几次不同的是这次的定时器清空要对每个li分别清空。

    六、多物体变透明度

          涉及到透明度就要注意浏览器的兼容性问题。还有,透明度的初始值不能像上一个单独物体透明度初值那样设置一个,多物体的透明度初始值要分别设置,每个物体都有初始值。

     1 function changeOpacity(obj,speed,target) {
     2     clearInterval(obj.timer);//清除定时器,避免嵌套调用
     3     obj.timer=setInterval(function () {
     4         if (obj.alpha==target) {//如果透明度达到目标值,清除定时器
     5             clearInterval(obj.timer);
     6         } else {//当前透明度加上透明度变化的速度
     7             obj.alpha=obj.alpha+speed;
     8             obj.style.filter='alpha(opacity:'+obj.alpha+')';//IE浏览器
     9             obj.style.opacity=obj.alpha/100;//火狐和谷歌
    10         }
    11     }, 30)
    12 }

          下面用几个div举例子:

     1 <style type="text/css">
     2     *{
     3         margin: 0;
     4         padding: 0;
     5     }
     6     div{
     7         width: 200px;
     8         height: 200px;
     9         background: red;
    10         margin: 10px;
    11         float: left;
    12         filter: alpha(opacity:30);/*filter滤镜:不透明度,IE浏览器*/ 
    13         opacity: 0.3;/*火狐和谷歌*/
    14     }
    15 </style>
     1 <div></div>
     2 <div></div>
     3 <div></div>
     4 <script type="text/javascript">
     5     window.onload=function(){
     6         var ob=document.getElementsByTagName('div');
     7         for (var i = 0; i < ob.length; i++) {
     8             ob[i].timer=null;
     9             ob[i].alpha=30;//每一个的透明度初值要分开设置
    10             ob[i].onmouseover=function(){
    11                 changeOpacity(this,10,100);//从30变到100
    12             }
    13             ob[i].onmouseout=function(){
    14                 changeOpacity(this,-10,30);//从100变回30
    15             }
    16         }
    17     }
    18 </script>
  • 相关阅读:
    struts2 错误:Dispatcher initialization failed java.lang.RuntimeException
    JavaScript如何实现拖放功能
    Javascript异步执行时要小心的变量作用域
    Javascript异步编程
    Origin null is not allowed by Access-Control-Allow-Origin
    eclipse spket插件 错误 Syntax error on token "(", FunctionExpressionHeader expected after this
    EL--Expression Language
    [Swift]LeetCode820. 单词的压缩编码 | Short Encoding of Words
    [Swift]LeetCode879. 盈利计划 | Profitable Schemes
    [Swift]LeetCode878. 第 N 个神奇数字 | Nth Magical Number
  • 原文地址:https://www.cnblogs.com/csxiaoyu/p/5203468.html
Copyright © 2011-2022 走看看