参数为:元素,对象,回调函数
//缓动动画,就是在 (目标值 - 所获取到的当前样式)/ 2 为速度 // 目标值就是你在obj传入的属性值 当前样式,则需要使用获得非行内样式的函数 //缓动动画修改的样式 为style = style + 速度(speed) // 动画的运动:需要定位和定时器 因此运动的样式都是在定时器设置 //动画结束的时候:需要修改ele的样式,也就是需要知道动画什么时候结束 // 这就需要借助一个定时器的计数器了 每比那里一次,计数一次,当到底动画执行的时候,就计数器-- //需求:封装一个动画函数,传递的参数为ele元素,obj对象的形式 let box = document.querySelector(".box") animation(box, { left: 1000, top: 100 }, function () { console.log(1); }) function animation(ele, obj, callback) { let timerLen = 0; //定时器的计数器 //第一步:遍历对象obj 拿到目标值 obj[key] 拿到需要修改的属性样式 key for (let key in obj) { // console.log(key); // top left // console.log(obj[key]); // 100 100 timerLen++ let speed; //速度 let timer = setInterval(() => { let style = parseInt(getStyle(ele, key)) //拿到的是0px 直接取整为0 speed = Math.ceil((obj[key] - style) / 2) //速度 需要向上取整 style = style + speed //设置动画元素的样式 // console.log(obj[key], style); if (obj[key] === style) { //当样式到底目标值的时候,清除定时器 clearInterval(timer) timerLen-- if (timerLen === 0) { // console.log("动画执行完毕"); callback() } } ele.style[key] = obj[key] + "px" }, 1000) } }需求:点击的时候,不能使得动画加速! 参数为:元素,对象,回调函数
<div class="box"></div> <button class="btn">按钮</button> //缓动动画,就是在 (目标值 - 所获取到的当前样式)/ 2 为速度 // 目标值就是你在obj传入的属性值 当前样式,则需要使用获得非行内样式的函数 //缓动动画修改的样式 为style = style + 速度(speed) // 动画的运动:需要定位和定时器 因此运动的样式都是在定时器设置 //动画结束的时候:需要修改ele的样式,也就是需要知道动画什么时候结束 // 这就需要借助一个定时器的计数器了 每比那里一次,计数一次,当到底动画执行的时候,就计数器-- //点击按钮,在事件驱动的时候,触发动画,那么定时器的变量不能定义为变量哦,因为每一次点击触发的一个函数, // 函数开辟了一个新的空间,因此下一次定时器需要清除上一个定时器时候,无法清除 //所以:需要把这个定时器的名字 挂载在ele这个元素对象身上 ele[key] 对象的属性 这样既可! 不能ele[key].timer //需求:封装一个动画函数,传递的参数为ele元素,obj对象的形式 let box = document.querySelector(".box") let btn = document.querySelector(".btn") btn.onclick = function () { animation(box, { left: 1000, top: 100 }, function () { console.log(1); }) } function animation(ele, obj, callback) { let timerLen = 0; //定时器的计数器 //第一步:遍历对象obj 拿到目标值 obj[key] 拿到需要修改的属性样式 key for (let key in obj) { // console.log(key); // top left // console.log(obj[key]); // 100 100 timerLen++ let speed; //速度 clearInterval(ele[key]) ele[key] = setInterval(() => { let style = parseInt(getStyle(ele, key)) //拿到的是0px 直接取整为0 speed = Math.ceil((obj[key] - style) / 2) //速度 需要向上取整 style = style + speed //设置动画元素的样式 // console.log(obj[key], style); if (obj[key] === style) { //当样式到底目标值的时候,清除定时器 clearInterval(ele[key]) timerLen-- if (timerLen === 0) { // console.log("动画执行完毕"); callback() } } ele.style[key] = obj[key] + "px" }, 100) } }