JavaScript实现缓慢动画的封装

简介: JavaScript实现缓慢动画的封装

实现小球不匀速运动

 
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
 
        #ball {
            width: 100px;
            height: 100px;
            background-color: red;
            border-radius: 50%;
            position: absolute;
            left: 100px;
            top: 200px
        }
 
        #wall_l {
            width: 1px;
            height: 300px;
            background-color: black;
            position: absolute;
            left: 99px;
            top: 150px;
        }
 
        #wall_r {
            width: 1px;
            height: 300px;
            background-color: black;
            position: absolute;
            left: 1200px;
            top: 150px;
        }
    </style>
</head>
 
<body>
    <div id="ball"></div>
    <div id="wall_l"></div>
    <div id="wall_r"></div>
 
    <button>向右</button><button>向左</button> <button>开始</button>
    <script>
        //1.查
        var ball = document.querySelector('#ball');
        var wall_l = document.querySelector('#wall_l')
        var wall_r = document.querySelector('#wall_r')
 
        var btns = document.querySelectorAll('button');
 
        //向右
        btns[0].onclick = function () {
            moveR()
 
        }
        btns[1].onclick = function () {
            moveL()
        }
        btns[2].onclick = function () {
            animate(ball,1100,function(){
                animate(ball,100)
            })
 
        }
 
        //缓慢动画   (由快到慢)   
        //速度公式   speed= (end-start)/10
        var timer;
        function moveR() {
            clearInterval(timer);
         timer=  setInterval(function () {
                // 获得小球当前的位置
                var l=ball.offsetLeft;
                var target=1100;//目标位置  结束位置
                var speed=(target-l)/10;
                 speed=  Math.ceil(speed)
                console.log(speed);//0.4~~~0
                if(ball.offsetLeft==target){
                    clearInterval(timer)
                }
                //让小球 改变位置
                ball.style.left=l+speed+'px'
            }, 25)
 
 
        }
 
        function moveL() {
            clearInterval(timer);
         timer=  setInterval(function () {
                // 获得小球当前的位置
                var l=ball.offsetLeft;
                var target=100;//目标位置  结束位置
                var speed=(target-l)/10;
                 speed=  Math.floor(speed)
                console.log(speed);//-0.5~~~0
                if(ball.offsetLeft==target){
                    clearInterval(timer)
                }
                //让小球 改变位置
                ball.style.left=l+speed+'px'
            }, 25)
 
 
        }
 
 
    </script>
    <script>
        //封装一下
        // obj 对象  target 目标位置  callback回调函数 -可选
        function animate(obj,target,callback){
 
            clearInterval(obj.timer);//防止定时器累加  或来回拉扯的过程
            obj.timer=  setInterval(function () {
                // 获得小球当前的位置
                var l=obj.offsetLeft;
                var speed=(target-l)/10;
                 speed= speed>0? Math.ceil(speed):Math.floor(speed)
                if(obj.offsetLeft==target){
                    clearInterval(obj.timer);
                    callback&&callback();
                }
                //让小球 改变位置
                obj.style.left=l+speed+'px'
            }, 25)
 
        }
    </script>
 
</body>
 
</html>
相关文章
|
1月前
|
前端开发 JavaScript UED
使用JavaScript实现动画效果
【4月更文挑战第21天】使用JavaScript实现动画效果
34 10
|
1月前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
42 4
|
1月前
sd.js 2.0封装:更加简化请求传参内容(逐步废弃、逐渐日落2024.01.02)
sd.js 2.0封装:更加简化请求传参内容(逐步废弃、逐渐日落2024.01.02)
|
2天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。
【6月更文挑战第25天】JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。闭包基于作用域链和垃圾回收机制,允许函数记住其定义时的环境。例如,`createCounter`函数返回的内部函数能访问并更新`count`,每次调用`counter()`计数器递增,展示了闭包维持状态的特性。
15 5
|
22天前
|
存储 移动开发 JavaScript
uni-app 64聊天类chat.js封装(一)
`uni-app` 是一个使用 Vue.js 开发所有前端应用的框架,可以编译到iOS、Android、H5以及各种小程序等多个平台。当你提到“64聊天类`chat.js`封装”时,我假设你希望了解如
|
12天前
JS-函数封装数组求和案例
JS-函数封装数组求和案例
|
1月前
|
SQL 存储 前端开发
React&Nest.js全栈社区平台(五)——👋封装通用分页Service实现文章流与详情
React&Nest.js全栈社区平台(五)——👋封装通用分页Service实现文章流与详情
React&Nest.js全栈社区平台(五)——👋封装通用分页Service实现文章流与详情
|
1月前
|
JavaScript 前端开发 UED
【JavaScript技术专栏】使用JavaScript实现拖放和动画效果
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现拖放功能和基本动画效果。拖放功能通过监听mousedown、mousemove和mouseup事件,记录元素初始位置并更新其坐标实现。动画效果则利用requestAnimationFrame函数持续改变元素位置,创建平滑移动效果。示例代码包括HTML结构和对应的JavaScript实现。
|
1月前
|
存储 前端开发 JavaScript
JavaScript如何封装一些常见的函数来提高工作效率
通过封装这些常见函数,你可以在项目中重复使用,提高代码的复用性和工作效率。这些函数包括获取元素、发起Ajax请求、处理本地存储、日期格式化、定时器等功能,可以在不同场景中减少重复的代码编写。
16 0
JavaScript如何封装一些常见的函数来提高工作效率
|
1月前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
19 0