/*
* elem: 操作哪一个元素
* json:表示多个属性
* attr: 操作的那个元素的css中的什么属性
* value: 操作的那个元素的css中的那个属性的目标值
* cb:回调函数,前一个运动执行后,这一段代码才被执行
*/
var startMove = (elem, json, cb)=>{
// 每当执行运动函数的时候,都先把上一次的运动结束掉
clearInterval(elem.timer);
// 开启定时器,让elem的attr属性,不断的变化
elem.timer = setInterval( ()=>{
// 循环,把json中的每一个属性,都做处理(让json中的每一个属性,都运动起来)
var flag = true; //是不是所有的属性,都运动到了目标值
for( var attr in json ){
// attr属性的目标值
var value = json[attr]; //此时的json是一个只有一个元素的对象,如: left:500;
//所以value是500
// 求当前属性值
var v = getComputedStyle(elem)[attr]; //attr应该是left
if( attr=="opacity" ){
v = Math.round(v*100);
}else{
v = parseInt(v);
}
//console.log(v);
// 求目标值与当前值的间距
var dist = value-v;
// 求步长值(注意:缓冲运动中,步长值是逐渐减小的)
var step = dist/6;
//console.log(step);
// 如果属性逐渐变大的运动,那么step最后几次的值类似 0.1,我们希望把0.1变为1
// 如果属性逐渐变小的运动,那么step最后几次的值类似 -0.1,我们希望把-0.1变为-1
if( step>0 ){
step = Math.ceil(step);
}else{
step = Math.floor(step);
}
// 更新属性值
//console.log(v, step);
if( attr=="opacity" ){
elem.style[attr] = (v+step)/100;
}else{
elem.style[attr] = (v+step)+'px';
}
// 如果到达目标值,运动停止
//if( v==value ){
// clearInterval(elem.timer);
//}
if( v!=value ){// 只要有1个属性,没有到达目标值,就让flag等于false
flag = false;
}
}
// 判断是否所有的属性,都已经到达了目标值
if( flag ){
clearInterval(elem.timer);
if( cb ){ // 如果设置了回调函数,则执行它。不写if的话,当cd没有设置时,会报错
cb();
}
}
}, 30 );
}
startMove( div1, {"left":100} ,()=>{
startMove(div1 , {"top" :300});
});

stratMove方法的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. PHP开发小技巧③—实现多维数组转化为一维数组

    在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...

  2. shell脚本之获取CPU使用率

    今天一个同事要测试OJ项目,同时我这边也需要知道他在压测过程中, CPU的使用率怎么样,虽说可以用top实时查看,但是进程太多了,我不需要获取那么多信息,我仅仅只要知道当前压测过程中CPU实时的使用率 ...

  3. 内存大厂威刚发布速度高达550MB/s的固态硬盘SU750

    近日,内存大厂ADATA(威刚)宣布推出两款1款全新的固态硬盘——SU750. SU750是一款传统的2.5英寸SSD,采用了新一代TLC 3D NAND闪存,官方表示借助SLC缓存,其最高存取速度可 ...

  4. PAT A1102 Invert a Binary Tree (25 分)——静态树,层序遍历,先序遍历,后序遍历

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

  5. TCP/IP协议--TCP协议概括和TCP连接的建立和终止

    TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...

  6. WPF中反转3D列表项

    原文:WPF中反转3D列表项 WPF中反转3D列表项                                                         周银辉记得在苹果电脑中有一个很酷的 ...

  7. Ionic App中嵌入外部网页的问题

    在app中不可避免的要引用第三方的页面,那么在Ionic中是如何实现呢? 1.设计引用外部页面的html框架页面,分3部分,表头有2个按钮,中间是引用的页面,底部隐藏分享相关按钮,具体页面如下: &l ...

  8. ajax获取的数据如何渲染到dom元素上

    1.常见的字符串拼接 (对于动态创建的元素添加js时,使用事件委托,利用事件冒泡的原理,把事件添加到父级元素上,触发执行效果) $("ul").on('click','li',fu ...

  9. IOC框架之Ninject 简介

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 上篇博客介绍了依赖注入的三种方式:构造方法注入,属性注入,接口注入!详情请参考 ...

  10. [Oracle]Oracle 各产品的 生命周期

    http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf