美文网首页原生Js的Demo合集
链式运动与同时运动的简单Demo

链式运动与同时运动的简单Demo

作者: 做有趣的恶魔 | 来源:发表于2017-04-24 13:06 被阅读10次

链式运动

一、Html布局
<body>
  <div id="test"></div>
</body>
二、Css样式
<style>
    body{
      margin:0;
      padding: 0;
    }
    #test{
      width:200px;
      height: 100px;
      background: yellow;
      margin-bottom: 20px;
      filter:alpha(opacity:30); /*针对 IE8 以及更早的版本*/
      opacity:0.3;
      border: 4px solid blue;
      /*添加一个宽度为4px的边框*/
    }
</style>
三、Js部分
startMove = function(obj,attr,iTarget,fn){
//链式运动需要添加一个回调函数作为参数
  clearInterval(obj.timer);
  //开启定时器前先关闭所有定时器
  obj.timer = setInterval(function(){
    var icur = 0;
    if(attr == 'opacity'){
      icur = Math.round(parseFloat(getStyle(obj,attr))*100);
      //如果是opacity则应用parseFloat 之后×100是为了方便兼容alpha
      //parseFloat取到的是多位小数 所以用Math.round四舍五入
    }else{
      icur = parseInt(getStyle(obj,attr));
    }
    var speed = (iTarget -icur)/8;
    speed = speed > 0?Math.ceil(speed):Math.floor(speed);
    //缓冲运动 speed>0向上取整 speed<0向下取整
    if(icur == iTarget){
      clearInterval(obj.timer);
      if(fn){
        fn(); //上一个动作完成时判断是否需要执行下一个动作
      }
    }else{
      if(attr == 'opacity'){
        obj.style.filter = 'alpha(opacity: '+(icur+speed)+')';
        //针对 IE8 以及更早的版本
        obj.style.opacity = (icur+speed)/100;
        //针对FF Chrome
      }else{
        obj.style[attr] = icur + speed + "px";
      }
    }
  },30)
}
window.onload = function(){
  var myDiv = document.getElementById("test");
  myDiv.onmouseover = function(){
    //链式调用
    startMove(this,'width',400,function(){
      startMove(myDiv,'height',400,function(){
        startMove(myDiv,'opacity',100);
      });
    });
  }
  myDiv.onmouseout = function(){
    //注意动作执行顺序
    startMove(this,'opacity',30,function(){
      startMove(myDiv,'height',100,function(){
        startMove(myDiv,'width',200);
      });
    });
  }
}
getStyle = function(obj,attr){
  if(obj.currentStyle){
    //currentStyle IE浏览器
    return obj.currentStyle[attr];
  }else{
    return getComputedStyle(obj,false)[attr];
    //getComputedStyle 第二个参数为垃圾参数 写什么都可以 习惯false  FF Chrome浏览器
  }

同时运动

使用Json修改运动框架
startMove = function(obj,json,fn){
  var flag = true;//假设所有运动都达到目标值的flag

  clearInterval(obj.timer);
  //开启定时器前先关闭所有定时器
  obj.timer = setInterval(function(){
    for(var attr in json){
      var icur = 0;
      if(attr == 'opacity'){
        icur = Math.round(parseFloat(getStyle(obj,attr))*100);
        //如果是opacity则应用parseFloat 之后×100是为了方便兼容alpha
        //parseFloat取到的是多位小数 所以用Math.round四舍五入
        }else{
          icur = parseInt(getStyle(obj,attr));
        }
        var speed = (json[attr] -icur)/8;
        speed = speed > 0?Math.ceil(speed):Math.floor(speed);
        //缓冲运动 speed>0向上取整 speed<0向下取整
        if(icur != json[attr]){
          //如果不是所有的运动达到目标值
          flag = false;
          if(attr == 'opacity'){
              obj.style.filter = 'alpha(opacity: '+(icur+speed)+')';
              //针对 IE8 以及更早的版本
              obj.style.opacity = (icur+speed)/100;
              //针对FF Chrome
            }else{
              obj.style[attr] = icur + speed + "px";
            }
        }else{
          //如果全部运动达到目标值,关闭定时器
          clearInterval(obj.timer);
          if(fn){
              fn(); //判断是否需要执行回调函数
          }
        }
     }
  },30)
}
var myDiv = document.getElementById("test");
  myDiv.onmouseover = function(){
    startMove(this,{width:400,height:400,opacity:100},function(){
      alert("变换完成~");
    });
  }
  myDiv.onmouseout = function(){
    startMove(this,{opacity:30,height:100,width:200});
  }

相关文章

  • 链式运动与同时运动的简单Demo

    链式运动 一、Html布局 二、Css样式 三、Js部分 同时运动 使用Json修改运动框架

  • JavaScript 运动 02 —— animate 函数增强

    上文我们实现了匀速运动,本文在上文的基础上进行一些改进,最终目标是: 多值同时运动 链式运动 使用 async/a...

  • js运动5 链式运动框架

    一环扣一环 让同一个对象对待一种事件(例如onmouseover产生多种属性变化,但不是同时的 HTML move...

  • 几个很有效的伸展动作

    在伸展运动中,有的运动比较简单,有的运动比较难,当然这些伸展运动都是有很多好处的,同时也都是有讲究的,那简单的伸展...

  • 简单的链式编程demo

  • 多物体运动的简单Demo(一)

    一、Html布局 二、Css样式 三、Js部分 改变宽/高度 改变透明度

  • 多物体运动的简单Demo(二)

    一、Html布局 二、Css样式 三、Js部分 改变添加边框后的宽/高度 自定义改变添加边框后的宽/高度 自定义改...

  • 运动与公益同时进行

    最近不懂是怎么了,人显得很焦躁,天气过热是一部分原因,还有就是总想做点事情出来,但偏偏什么都没做到。 现在还能有小...

  • 简单运动

    简单运动加持对身体的调控 谁能想到一直有锻炼的我会因为回了趟老家,胖了好几斤不说,脸也弄得油腻腻、还黑头和脸黄呢。...

  • 运动轨迹的demo封装

    基于上一篇文章使用OpenLayers3来展示一段运动轨迹的封装拓展 样式参数什么的都写的乱七八糟的,只是简单的实...

网友评论

    本文标题:链式运动与同时运动的简单Demo

    本文链接:https://www.haomeiwen.com/subject/xfxpzttx.html