// 1. css样式

        div {
width: 100px;
height: 100px;
background: olivedrab;
position: absolute;
left: 0px;
opacity: 1;
} .top {
top: 100px;
} .bottom {
top: 300px;
}
// html和JavaScript代码

<div class="top"></div>
<div class="bottom" style="background-color: coral;"></div> <script>
// 多物体多值链式运动框架 // 获取对象样式相对应属性的值
var targetObj = {
width: 400,
height: 400,
opacity: 50,
left: 300,
top: 200
}
     // 获取对应的HTML元素
oDivArray = document.getElementsByTagName('div');
     // 调用函数
oDivArray[0].onclick = function() {
startMove(this, targetObj, function() {
startMove(oDivArray[1], targetObj);
});
}
     // 获取元素样式对应的属性值
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return window.getComputedStyle(obj, false)[attr];
}
} // 封装动画函数
function startMove(obj, json, callback) {
        // 清除目标对象的定时器,而非全局
clearInterval(obj, timer);
        // iSpeed:动画速度,iCur:当前样式属性的值,timer:定时器对象
var iSpeed, iCur, timer;
obj.timer = setInterval(function() {
var bStop = true; // 标志位,上一个对象的动画是否完成
for (var attr in json) {
if (attr === 'opacity') { // 如果获取的是opacity,则乘100倍,否则正常获取值
iCur = parseFloat(getStyle(obj, attr)) * 100;
} else {
iCur = parseInt(getStyle(obj, attr));
}
iSpeed = (json[attr] - iCur) / 7;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); //设置动画速度
if (attr == 'opacity') {
obj.style.opacity = (iCur + iSpeed) / 100; // 乘100的值还原回去
} else {
obj.style[attr] = iCur + iSpeed + 'px';
}
if (iCur != json[attr]) { // 如果当前属性的值不等于用户穿进来的对象里的属性对应的值,则继续执行动画
bStop = false;
} else { // 达到期待的目标,设置标志位为真,即可以停止
bStop = true;
}
}
if (bStop) {
clearInterval(obj.timer); //如果标志位为真,则达到用户期待的动画效果
typeof callback == 'function' ? callback() : '';// 判断用户是否有传入回调函数,有则执行,无则结束。链式动画执行框架
}
}, 30)
}
</script>

end

最新文章

  1. http2协议翻译(转)
  2. kafka设计原理介绍
  3. Android Content Provider基础
  4. ubuntu安装skype
  5. IOS- 02 零碎知识总结
  6. php使用p3p实现cookies跨域设置 实现单点登录,全站登录
  7. 【kd-tree】bzoj2648 SJY摆棋子
  8. MySQL Show命令的使用
  9. Xshell远程连接Linux时无法使用小键盘的解决方式
  10. 62. Unique Paths
  11. 如何在Android应用中加入广告
  12. BZOJ 1090: [SCOI2003]字符串折叠 区间DP
  13. 关于使用Element.getNodeValue()返回NULL的问题
  14. How to execute tons of tasks parallelly with TPL method?
  15. Hadoop学习笔记1:伪分布式环境搭建
  16. dubbo知识体系
  17. Day3:html和css
  18. RTP/RTCP 和 SRTP/SRTCP协议(转)
  19. 2019.01.26 codeforces 632E. Thief in a Shop(生成函数)
  20. Linux - ssh 连接慢解决

热门文章

  1. Head First设计模式——命令模式
  2. shell中tar加密打包
  3. Mirantis 收购 Docker | 云原生生态周报 Vol. 28
  4. python:模块0
  5. Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值
  6. [FPGA]Verilog实现可自定义的倒计时器(24秒为例)
  7. 2019-9-26:渗透测试,基础学习,js正则以及什么是目录扫描,笔记
  8. 【Luogu P2563】【集训Day 4 动态规划】质数和分解
  9. Java并发之synchronized关键字和Lock接口
  10. phpstorm2019激活码