100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【JavaScript-动画原理】如何使用js进行动画效果的实现

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

时间:2024-02-11 02:06:49

相关推荐

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

💂 个人主页: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山鱼,感谢您的支持

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

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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。