/*
* 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. UVA11853-Paintball(对偶图)

    Problem UVA11853-Paintball Accept:229  Submit:1830 Time Limit: 3000 mSec Problem Description You are ...

  2. maven 打包生成doc和源码插件

    <!--配置生成Javadoc包--> <plugin> <groupId>org.apache.maven.plugins</groupId> < ...

  3. linked-list-cycle (快慢指针判断是否有环)

    class Solution { public: bool hasCycle(ListNode *head) { if (head == NULL) return NULL; //空表 ListNod ...

  4. linux grep 的使用

    常用的 grep 选项有:    -c 只输出匹配行的个数.    -i 不区分大小写(只适用于单字符).    -h 查询多文件时不显示文件名.    -l 查询多文件时只输出包含匹配字符的文件名. ...

  5. mysql 存儲emjoy表情是報錯Incorrect string value:

    解决方法: [mysqld] character-set-client-handshake=FALSE character-set-server=utf8mb4 collation-server=ut ...

  6. supervisor 结合 Dockerfile ENTRYPOINT

    通过docker run -d 方式启动容器报“Unlinking stale socket /tmp/supervisor.sock”错误,而通过docker run -it 启动后手动执行  /u ...

  7. 人生苦短之HTTP协议及Requests库的方法

    requests库的主要方法:requests.request()构造一个请求    requests.get()获取HTML网页的主要方法,对应于HTTP的GET    requests.head( ...

  8. php计算utf8字符串长度

    strlen()函数计算中文字符不太友好.扩展的mb_strlen()函数可以补充这个.如果没有这个扩展,也可以利用正则匹配分解. 函数如下: // 对utf-8字符的长度 function utf8 ...

  9. 安全提示:IIS不要开启“WebDAV”扩展(转载)

    在IIS设置里,有一个“Web服务扩展”的设置,其中包括“WebDAV”扩展.许多人都不明白,这个“WebDAV”扩展是干嘛用的,要不要开启呢?有不少人的想法是“开启吧,以免影响网站运行,启用总比不启 ...

  10. [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树

    这次我们来搞一个很新奇的知识点:克鲁斯卡尔重构树.它也是一种图,是克鲁斯卡尔算法求最小生成树的升级版首先看下面一个问题:BZOJ3545 Peaks. 在Bytemountains有N座山峰,每座山峰 ...