首页IT科技javascript动画教程(【JavaScript-动画原理】如何使用js进行动画效果的实现)

javascript动画教程(【JavaScript-动画原理】如何使用js进行动画效果的实现)

时间2025-06-18 10:05:20分类IT科技浏览4684
导读:💂 个人主页:Aic山鱼 ...

💂 个人主页:Aic山鱼 

 个人社区:山鱼社区

💬 如果文章对你有所帮助请点个👍吧! 欢迎关注              、点赞                    、收藏(一键三连)和订阅专哦

目录

前言

1.动画原理

2.动画函数的封装

3.给不同元素添加定时器

4.缓动动画原理

5.给动画添加回调函数

6.动画函数的使用

 写在最后

前言

动画对于我们来说都不陌生              ,css里面就有很多动画                    ,2d       ,3d等各种动画              ,本篇主要是如何使用js实现动画效果                    ,如果本篇文章对你有帮助       ,点赞支持一下吧!

1.动画原理

        1.获得盒子当前位置         2.让盒子在当前位置加上1个移动距离         3.利用定时器

不断重复这个操作

        4.加一个结束定时器

的条件        

        5.注意该元素需要添加定位       ,才能使用element.style.left
<body> <div> </div> <script> var div = document.querySelector(div); var timer = setInterval(function () { if (div.offsetLeft >= 500) { clearInterval(timer); } div.style.left = div.offsetLeft + 2 + px; }, 30) </script> </body>

主要核心就是利用定时器进行动画的实现

2.动画函数的封装

<script> // 简单动画函数封装 function animate(obj, rug) { var timer = setInterval(function () { if (obj.offsetLeft >= rug) { clearInterval(timer); } obj.style.left = obj.offsetLeft + 2 + px; }, 30) } var div = document.querySelector(div); animate(div,300); </script>

把这个动画封装成一个函数                    ,方便以后的使用              ,该封装函数里的obj是哪个元素要进行动画的实现rug是该元素要移动多少距离

3.给不同元素添加定时器

<body> <div> </div> <button>点击走</button> <script> // 简单动画函数封装 // 给不同元素添加定时器 function animate(obj, rug) { clearInterval(obj.timer); obj.timer = setInterval(function () { if (obj.offsetLeft >= rug) { clearInterval(obj.timer); } else { obj.style.left = obj.offsetLeft + 2 + px; } }, 30) } var div = document.querySelector(div); var but = document.querySelector(button); but.addEventListener(click, function () { animate(div, 200); }) </script>

这样就能实现多个元素进行动画的使用了       ,并且每个元素都有属于自己的定时器

4.缓动动画原理

公式:目标值-现在的位置/10                     ,作为每次的移动距离

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> div { position: absolute; left: 0; width: 100px; height: 100px; background-color: pink; } </style> </head> <body> <button>点击</button> <div></div> <script> function animate(obj, rug) { clearInterval(obj.timer); obj.timer = setInterval(function () { // 步长值 var step = (rug - obj.offsetLeft) / 10; if (obj.offsetLeft == rug) { clearInterval(obj.timer); } else { obj.style.left = obj.offsetLeft + step + px; } }, 15) } var div = document.querySelector(div); var but = document.querySelector(button); but.addEventListener(click, function () { animate(div, 500); }) </script> </body> </html>

5.给动画添加回调函数

回调函数原理:函数可以作为一个参数              。将这个函数作为参数传到另一个函数里面 ,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调                    。

当跑完800米后              ,会弹出一个框“hello              ”,这个就是在执行完800米这个动画后再次进行的函数                    ,这就是回调函数

 6.动画函数的使用

实现侧边栏滑动效果

当鼠标经过slider就会让con这 个盒子滑动到左侧

当鼠标离开slider就会让con这 个盒子滑动到右侧

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="./js/animate.js"></script> <style> .silder { margin-left: 1600px; text-align: center; position: relative; line-height: 100px; width: 100px; height: 100px; background-color: aqua; } span {} .con { position: absolute; top: 0; left: 0; z-index: -1; width: 200px; height: 100px; background-color: rgb(132, 0, 255); } </style> </head> <body> <div class="silder"> <span></span> <div class="con">问题反馈</div> </div> <script> var silder = document.querySelector(.silder); var con = document.querySelector(.con); var span = document.querySelector(span); silder.addEventListener(mouseenter, function () { animate(con, -200, function () { span.innerHTML = ; }); }) silder.addEventListener(mouseleave, function () { animate(con, 0, function () { span.innerHTML = ; }); }) </script> </body> </html> function animate(obj, rug, callback) { clearInterval(obj.timer); obj.timer = setInterval(function () { // 步长值 // var step = Math.ceil((rug - obj.offsetLeft) / 10); var step = (rug - obj.offsetLeft) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); if (obj.offsetLeft == rug) { clearInterval(obj.timer); if (callback) { callback(); } } else { obj.style.left = obj.offsetLeft + step + px; } // 回调函数写道计时器结束里 }, 15) }

 写在最后

我是Aic山鱼                    ,感谢您的支持

​原 创 不 易 ✨还希望支持一下

点赞👍:您的赞赏是我前进的动力!

收藏⭐:您的支持我是创作的源泉!

评论✍:您的建议是我改进的良药!

山鱼🦈社区:山鱼社区💌💌

希望三连下👍⭐✍支持一下博主🌊

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
ps快速选择工具怎么抠图保存到桌面(ps快速选择工具怎么抠图) vue的思维导图(Vue基础开发入门之简单语法知识梳理(思维导图详解))