/*
* 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});
});

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)
  2. 每天5分钟 玩转OpenStack 目录列表
  3. [转]用jpa创建web项目,报错:No persistence units parsed from {classpath*:META-INF/persistence.xml}
  4. [LintCode] Gray Code 格雷码
  5. java 使用 poi 解析excel
  6. webstrom 中启用emmet插件的方法
  7. [BZOJ1067][SCOI2007]降雨量
  8. 47.MIF和COE文件格式
  9. MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
  10. 通过blktrace, debugfs分析磁盘IO
  11. python3实现邮件发送程序
  12. 第十四个目标(dp + 树状数组 + 线段树)
  13. DEBUG不能进断点 “exited with code -1073741515”
  14. XYZZY(spfa求最长路)
  15. Vue 知识复习(上)
  16. C#的多样性,new,sealed方法
  17. EOJ 306 树上问题
  18. POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
  19. js异步导致的错误
  20. PPT里面的背景音乐找不到?

热门文章

  1. centos7下安装docker(5镜像命名)
  2. 在H5页面内通过地址调起高德地图实现导航
  3. B轮公司技术问题列表(转)
  4. linxu系统知识和简单命令
  5. Java字节码里的invoke操作&&编译时的静态绑定与动态绑定
  6. YOU AND ME 不见不散(转载)
  7. 查看CentOS/Linux的版本信息
  8. ABP从入门到精通(5):.扩展国际化语言资源
  9. checkpoint-BLCR部署和测试(源码)
  10. 2018年计划小里程碑(6月)PMI-ACP 敏捷