stratMove方法
/*
* 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方法的更多相关文章
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
随机推荐
- UVA506-System Dependencies(拓扑序)
Problem UVA506-System Dependencies Accept:285 Submit:2824 Time Limit: 3000 mSec Problem Description ...
- exit status 3221225477 npm run dev 报错
Fatal error in , line 0 # Check failed: U_SUCCESS(status). # # # #FailureMessage Object: 000000B5882 ...
- VCS双机+oracle 11gR2+ASM主机名修改
----------------------------------------------------------------------------VCS修改主机名---------------- ...
- css学习之样式层级和权重
第一种情况 当选择器相同的情况下,引入方式的前后,决定页面最后的效果 ---------外部在最后面显示 ---------内部在最后面显示 第二种情况 引入方式相同时候,则是按照权重取最大(取权重最 ...
- kubespray 容器存储设备 -- rook ceph
1./root/kubespray/roles/docker/docker-storage/defaults/main.yml #在用kubespray部署集群是制定docker用什么设备 dock ...
- 一、java三大特性--封装
封装字面意思即包装.专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部 ...
- JS-JS变量命名规则
原则 变量名区分大小写,允许包含字母.数字.美元符号($)和下划线,但第一个字符不允许是数字,不允许包含空格和其他标点符号. 禁止使用JavaScript关键词.保留字全名. 变量命名长度应该尽可能的 ...
- vue 结合mint-ui Message box的使用方法
两种方式使用: 一.全局注册 1.在main.js中引入 //引入 import { MessageBox } from 'mint-ui'; //全局使用,挂载到原型上 Vue.prototyp ...
- [Deep-Learning-with-Python]GAN图片生成
GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...
- Python 学习 第六篇:迭代和解析
Python中的迭代是指按照元素的顺序逐个调用的过程,迭代概念包括:迭代协议.可迭代对象和迭代器三个概念. 迭代协议是指有__next__()函数的对象会前进到下一个结果,而到达系列的末尾时,则会引发 ...