本文实例为大家分享了JS实现添加缓动画的具体代码,供大家参考,具体内容如下
在看这篇博客之前需要了解 JS实现给不同元素设置不同的定时器
需要实现的效果:点击移动到600按钮之后下面的div会由快到慢移动到600px,点击移动到800之后又会移动到800px,又点击移动600的时候会倒回去移动到600px。
首先需要实现第一个功能:
1.缓动画实现,缓动画实现思路如下:
2.需要避免小数的出现,如果直接将上面的公式作为距离的话会出现小数,如果移动的距离是正数的话需要向上取整,如果移动的距离是负数(比如由800px移动到600px)的话需要向下取整。
完整代码:
<!DOCTYPE html> <html lang="en"> ? <head> ? ? <meta charset="UTF-8"> ? ? <meta http-equiv="X-UA-Compatible" content="IE=edge"> ? ? <meta name="viewport" content="width=device-width, initial-scale=1.0"> ? ? <title>缓动画</title> ? ? <style> ? ? ? ? div { ? ? ? ? ? ? position: absolute; ? ? ? ? ? ? top: 50px; ? ? ? ? ? ? left: 0px; ? ? ? ? ? ? width: 200px; ? ? ? ? ? ? height: 200px; ? ? ? ? ? ? background-color: pink; ? ? ? ? } ? ? </style> ? ? <script> ? ? ? ? window.addEventListener('load', function() { ? ? ? ? ? ? function move(obj, target, callback) { ? ? ? ? ? ? ? ? window.clearInterval(obj.timer); ? ? ? ? ? ? ? ? obj.timer = window.setInterval(function() { ? ? ? ? ? ? ? ? ? ? // 把步长值改为整数,不要出现小数的情况 往上取整 ? ? ? ? ? ? ? ? ? ? ? var step = (target - obj.offsetLeft) / 10; ? ? ? ? ? ? ? ? ? ? step = step > 0 ? Math.ceil(step) : Math.floor(step); ? ? ? ? ? ? ? ? ? ? // 回调函数写在清除定时器里面 ? ? ? ? ? ? ? ? ? ? if (obj.offsetLeft >= target) { ? ? ? ? ? ? ? ? ? ? ? ? window.clearInterval(obj.timer); ? ? ? ? ? ? ? ? ? ? ? ? if (callback) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? callback(); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? obj.style.left = obj.offsetLeft + step + 'px'; ? ? ? ? ? ? ? ? ? ? ? ? // console.log(obj.style.left); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }, 15) ? ? ? ? ? ? } ? ? ? ? ? ? var div = document.querySelector('div'); ? ? ? ? ? ? var btn600 = document.querySelector('.btn600'); ? ? ? ? ? ? btn600.addEventListener('click', function() { ? ? ? ? ? ? ? ? move(div, 600) ? ? ? ? ? ? }) ? ? ? ? ? ? var btn600 = document.querySelector('.btn800'); ? ? ? ? ? ? btn600.addEventListener('click', function() { ? ? ? ? ? ? ? ? move(div, 800, function() { ? ? ? ? ? ? ? ? ? ? div.style.backgroundColor = 'violet' ? ? ? ? ? ? ? ? }) ? ? ? ? ? ? }) ? ? ? ? }) ? ? </script> </head> ? <body> ? ? <button class="btn600">点击移动600</button> ? ? <button class="btn800">点击移动800</button> ? ? <div></div> </body> ? </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did124443