DOM高级操作——多属性运动完美封装

```javascript

//多属性同时运动封装(callback用于链式运动)

function animate(obj,param,callback,speedTime = 20){

//callback是接收了一个回调函数。这个回调函数需要在属性到达目标值时执行

if(!!callback && !(callback instanceof Function)){//callback有值,并且又不是函数

//将时间赋值给speedTime

speedTime = callback;

//将callback置为undefined

callback = undefined;

}

clearInterval(obj.timer);

obj.timer = setInterval(function(){

var flag = true;

for(var attr in param){

//zIndex属性不需要动画,直接赋值就可以了

if(attr === "zIndex" || attr === "display"){

obj.style[attr] = param[attr];

}else{

var current = 0;

if(attr === "opacity"){

current = getStyle(obj,attr) * 100;

}else{

current = parseInt(getStyle(obj,attr));

}

var speed = (param[attr] - current)/10;

speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

//判断是否所有的属性都到达了目标 值

if(param[attr] != current){//最少有一个没有到达目标值

flag = false;//flag为false表示最少有一个没有到达目标值

//没有到达目标值继续赋值

if(attr == "opacity"){

obj.style[attr] = (current + speed)/100;

}else{

obj.style[attr] = current + speed + "px";

}

}

}

}

//上面的for in循环没有去执行,flag保持为true时,说明这一次的运动过程所有的属性都到达了目标值

if(flag){//

clearInterval(obj.timer);

//到达目标值,开启链式

if(!!callback){

callback();

}

}

},speedTime);

}

//兼容ie8实现获取浏览器渲染的一元素样式值。

function getStyle(obj,attr){

if(!!window.getComputedStyle){//现代浏览器

return window.getComputedStyle(obj)[attr];

}

//ie8

return obj.currentStyle[attr];

}

```

多属性同时运动封装(callback用于链式运动)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 5,222评论 0 2
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,124评论 0 3
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,150评论 0 13
  • 一、Html布局 二、Css样式 三、Js部分 改变添加边框后的宽/高度 自定义改变添加边框后的宽/高度 自定义改...
    做有趣的恶魔阅读 1,423评论 0 0
  • 基础复习笔记 JS效果三要素: 时间 事件 运动轨迹(分步骤来实现先死后活法逐步来) (1)获取元素 : getE...
    2e9a10d418ab阅读 3,130评论 0 3