js简单动画:匀速动画、缓动动画、多物体动画以及透明度动画
主要实现以下几种简单的动画效果(其实原理基本相同):
1.匀速动画:物体的速度固定
2.缓动动画:物体速度逐渐变慢
3.多物体动画
4.透明度动画
效果实现:
1.匀速动画(以物体左右匀速运动为例)
动画效果主要是用定时器setInterval()来实现的,每隔几毫秒让物体移动一点距离,通过不断调用定时器来达到让物体运动的效果。
将定时器放在一个函数内,定义物体的运动速度speed为10,判断物体的运动方向(向左走或向右走)来规定speed的正负;
然后将 物体的offsetLeft加上速度speed 赋值给物体的left样式值(要给物体设置定位);
当物体到达目标位置时清除定时器;
1 var box = document.querySelector('.box'); // 获取box盒子 2 box.addEventListener("mouseover", function() { 3 animate(400); // 当鼠标经过盒子时,让盒子运动到400的位置 4 }); 5 var timer = null; // 声明一个变量来存储定时器 6 function animate(target) { // target 目标位置 7 clearInterval(timer); // 开启定时器前要先关闭上一个定时器,不然定时器会累加导致速度越来越快 8 timer = setInterval(function() { 9 var speed = 10; // 速度 固定值10 10 speed = box.offsetLeft < target ? speed : - speed; // 判断是向左走(负)还是向右走(正) 11 if(box.offsetLeft == target) { 12 clearInterval(timer); // 盒子到达目标值时清除定时器 13 } else { 14 box.style.left = box.offsetLeft + speed + 'px'; 15 } 16 },25) 17 }
2.缓动动画(和匀速运动相同原理,只不过速度做些改变)
让速度等于 目标值和当前位置之差/10,二者之差会越来越小,即速度speed也会越来越小;
二者之差除以十并不总是整数,可能会导致物体位置和目标值不能完全相等,所以需要对speed进行取整,大于0向上取整,小于0向下取整;
1 var box = document.querySelector('.box'); 2 box.addEventListener("mouseover", function() { 3 animate(400); 4 }); 5 var timer = null; 6 function animate(target) { 7 clearInterval(timer); 8 timer = setInterval(function() { 9 var speed = (target - box.offsetLeft) / 10; // 速度为目标值和当前位置之差/10 10 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); // 判断speed的正负,大于0向上取整,小于0向下取整 11 if(box.offsetLeft == target) { 12 clearInterval(timer); 13 } else { 14 box.style.left = box.offsetLeft + speed + 'px'; 15 } 16 }, 25) 17 }
3.多物体动画(相同原理,不过要多开器几个定时器)
因为有多个物体要做动画,所以要给每个物体都要开启一个定时器,向上边那样只声明一个timer是不行的,
所以要循环遍历每个li(我是用列表写了几个小盒子),给每个li声明一个timer来存储各自的定时器,
并且要给animate函数多添加一个形参obj来区分是哪个盒子的定时器
1 var lis = document.querySelectorAll('li'); 2 for(var i = 0; i < lis.length; i++) { // 循环遍历li 3 lis[i].timer = null; // 给每个li声明一个timer来存储定时器 4 lis[i].addEventListener("mouseover", function() { 5 animate(this, 400); 6 }); 7 } 8 function animate(obj, target) { 9 clearInterval(obj.timer); 10 obj.timer = setInterval(function() { 11 var speed = (target - obj.offsetLeft) / 10; 12 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); 13 if(obj.offsetLeft == target) { 14 clearInterval(obj.timer); 15 } else { 16 obj.style.left = obj.offsetLeft + speed + 'px'; 17 } 18 }, 25) 19 }
4.透明度动画(与匀速运动相似)
声明一个alpha变量来存储当前的透明度,speed为速度,当前透明度加速度 赋值给盒子的透明度样式。
(多个物体透明度也是和上边多物体动画一样的,给每个物体都添加一个定时器,并给animate函数多一个形参obj)
1 <style> 2 .box { 3 width: 200px; 4 height: 200px; 5 background-color: #f00; 6 opacity: 0.3; 7 filter: alpha(opacity = 30); /* 兼容IE8及以下的IE浏览器 */ 8 } 9 </style> 10 <script> 11 window.addEventListener('load', function() { 12 var box = document.querySelector('.box'); 13 box.addEventListener('mouseover', function() { 14 animateAlpha(100); // 鼠标经过盒子 透明度变为1 15 }) 16 box.addEventListener('mouseout', function() { 17 animateAlpha(30); // 鼠标离开透明度变为0.3 18 }) 19 var alpha = 30; // 存储当前透明度 初始值为30 20 var timer = null; 21 function animateAlpha(target) { 22 clearInterval(timer); 23 timer = setInterval(function() { 24 var speed = 10; 25 speed = alpha < target ? speed : - speed; // 判断速度的正负 26 if(alpha == target) { 27 clearInterval(timer); 28 } else { 29 alpha += speed; 30 /* 这里有两个样式都需要改变 */ 31 box.style.filter = 'alpha(opacity = '+ alpha +')'; 32 box.style.opacity = alpha / 100; // opacity别忘了除以100 33 } 34 }, 25); 35 } 36 }) 37 </script>
js简单动画:匀速动画、缓动动画、多物体动画以及透明度动画相关推荐
- 【JS动画基础】 闪动,匀速,缓动。
JS 动画之闪动,匀速,缓动. 由于本人记性不好,所以爱忘一些东西,现在将常用的写在这里. 废话不多说,直奔主题. 先是HTML部分. <div id="div1">& ...
- 第41天:匀速、缓动运动和图片无缝滚动
一.匀速运动和缓动运动 缓动运动 公式:leader=leader+(target-leader)/10;//leader为初始值0,target为结束值,10可以改变,值越大,速度越慢 1 < ...
- 匀速动画VS缓动动画(超详细)
文章目录 匀速动画 匀速动画案例描述 匀速动画案例图示 HTML+CSS 匀速动画JS代码 匀速动画JS代码改进----函数封装 缓动动画 缓动动画案例描述 缓动动画案例图示 HTML+CSS 缓动动 ...
- java easing_[译] 动画中缓动(easing)的基础知识
自然界中没有东西是从一个点线性地移动到另一点. 在现实中,事物在运动时可能加速或减速. 我们的大脑习惯于期待这种运动,因此在做动画时,应利用此规律. 自然的运动会让用户对你的应用感觉更舒服,从而产生更 ...
- 11、《每周一点canvas动画》——缓动动画
本系列文章代码文件 前面的章节我们介绍了许多基本的动画,在本节我们将使用这些基本的动画来创建一些高级动画.今天我们介绍的第一个高级动画叫做缓动动画(ease),也许在写css动画的时候已经接触过 ea ...
- Egret_Tween缓动动画
通常情况下,游戏中或多或少都会带有一些缓动动画.例如界面弹出,或者道具飞入飞出的特效等等.在制作这些缓动动画的时候我们仅仅 希望简单的办法实现这种移动或者变形缩放的效果.Egret中的 Tween 缓 ...
- 【JavaScript】缓动动画、网页轮播图
缓动动画 动画函数封装 1.1 动画实现原理 缓动动画 1.1 缓动效果原理 1.2 动画函数多个目标值之间移动 1.3 动画函数添加回调函数 1.4 动画函数封装到单独JS文件里面 案例:京东侧边栏 ...
- canvas系列教程07 ——捕获、拖拽、抛掷、缓动动画、弹性动画
捕获物体 多边形以及不规则图形的捕获非常复杂,采用的方法是分离轴定理(SAT)和最小平移向量(MTV).这里不展开介绍,有兴趣的小伙伴可以自行搜索了解一下.下面来介绍一下矩形和圆的捕获. 矩形的捕获 ...
- php magic模版插件,magic-带64种动画效果的CSS3动画库
magic.css是一款带64种动画效果的CSS3动画库.magic.css中的动画分为12大类,全部使用CSS3 animation动画来完成.各种效果使用非常简单,只需要为元素添加和移除相应的cl ...
- swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?
摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...
最新文章
- 学号 20172326 《程序设计与数据结构》第三周学习总结
- 阅读代码和修改别人代码的一些技巧以及注意事项
- 你需要掌握的三种编程语言
- 【贪心】【codeforces】651A Joysticks
- script 有哪个属性可以让它不立即执行 defer,async
- linux c之判断字符串是不是以另一字符串开始或者结尾
- git merge与rebase
- 两数之和-给定一个整数数组nums和一个目标值target,请你在该数组找出和为目标值的那两个整数,并返回他们的数组下标,你可以假设每种输入只会对应一个答案。但是,数组同一个元素不能使-python
- 浅谈时间函数gettimeofday的成本
- Maven学习总结(39)——Maven私服的搭建及使用deploy命令部署构建问题汇总
- Mybatis DAO接口为什么不需要实现类
- 模块化Java简介(转载infoq)
- 【渝粤题库】陕西师范大学200071 古代汉语 作业(高起本、高起专)
- 基于PHP开发的外卖订餐网站(带源码)
- 中级软考-软件设计师(一)
- [福大软工] Z班——Beta现场答辩反馈
- Win11任务栏不显示时间怎么办?Win11任务栏不显示时间的解决方法
- html自动增加文本框,html创建文本框
- 【 FlutterUnit 食用指南】 开源篇
- 【数据结构和算法】基础之素数