四、animate函数 发表于 2020-07-13 | 更新于: 2020-07-15 | 分类于 web前端 , JavsScript , JS进阶-01 | | 字数: 462 | 时长 ≈ 2 分钟四、animate函数12345678#box { width: 100px; height: 100px; background-color: red; position: absolute; top: 50px; left: 50px;}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970// 获取boxvar box = document.getElementById("box");// 改变box位置animate(box, {"left": 1000, "top": 300}, 1000, function(){ alert("动画完成了");});// $(xx).animate({}, time, callBack);// 封装函数,实现animate方法// @dom 表示要运动的元素// @json css样式// @time 要完成动画的时间 单位ms// @callBack 回调函数function animate(dom,json,time,callBack){ /* 逻辑分析: 定义间隔定时器,循环动画到目标值 既然是循环动画,那么每一次动画都是一个步长 步长值 = 总距离 / 总次数 总距离 = 目标值 - 初始值 总次数 = 总时间 / 定时器间隔时间 */ // 计数器 var count = 0; // 定义间隔时间 var interval = 20; // 总次数 = 总时间 / 间隔时间 var allCount = time / interval; // 获取元素的总距离,就是用目标值 - 初始值 // json里面传递的都是目标值 // 定义一个nowJson 用于保存元素的初始值 var nowJson = {}; for (var i in json){ // console.log(i); // left top // nowJson[i] = getComputedStyle(dom)[i]; // {left: "50px", top: "50px"} 字符串类型 // 转为number类型 nowJson[i] = parseInt(getComputedStyle(dom)[i]); // {left: 50, top: 50} } // console.log(nowJson); // 循环完毕之后初始值也就有了 // 计算总距离,再得到步长值 var stepJson = {}; for (var i in json){ // 步长值 = (目标值 - 初始值)/ 总次数 stepJson[i] = (json[i] - nowJson[i]) / allCount } // console.log(stepJson); // {left: 19, top: 9} // 定义定时器 var timer = setInterval(function(){ // 计数器++ count ++; // 改变dom的定位值 for (var i in json){ // 当前值 = 初始值 + 步长值 * 次数 dom.style[i] = nowJson[i] + stepJson[i] * count + "px"; } // 判断是否到达边界 if (count >= allCount){ // 停止定时器 clearInterval(timer); // 执行回调函数 短路语法 存在callBack 执行后面的,不存在就执行前面的 callBack && callBack(); } }, interval);} 相关文章点击查看一、DOM二十五、异形滚动参与多元素的运动二十四、异形滚动轮播图(样式轮替轮播图)二十三、篮球积分系统(数组思维)二十二、篮球积分系统(普通思维)二十一、手风琴蒙版效果二十、手风琴效果十九、间歇模型布局十八、三位置法十七、滚动轮播图本文标题:四、animate函数文章作者:Mango发布时间:2020年07月13日 - 22:16:56最后更新:2020年07月15日 - 13:28:19原始链接:https://mango185.github.io/post/bbd4025.html 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。-------------------本文结束 感谢您的阅读-------------------