参考答案:
前端常用的动画实现方式有以下种:
transition 属性animation 属性canvas绘制动画animate函数transitiontransition属性:
用来设置样式的属性值是如何从一种状态平滑过渡到另外一种状态
语法:
1transition: property duration timing-function delay;
transition是一种简写属性,它可以拆分为四个过渡属性。你可以 transition: 值1,值2,值3,值4 这样写,也可以:transition-property: 值1;,transition-duration:值2;,transition-timing-function:值2;,transition-delay:值4;这样写。
| 值 | 描述 |
|---|---|
| transition-property | 规定设置过渡效果的 CSS 属性的名称。 |
| transition-duration | 规定完成过渡效果需要多少秒或毫秒。 |
| transition-timing-function | 规定速度效果的速度曲线。 |
| transition-delay | 定义过渡效果何时开始。 |
演示代码:
1<div></div> 2
1div{ 2 width:50px; 3 height: 50px; 4 background-color: pink; 5} 6 7div:hover{ 8 width:200px; 9}
效果图:
由上图可看出:鼠标移入移出时,width状态的变化是瞬间完成的。
添加transition: 1s;后
1div{ 2 width:50px; 3 height: 50px; 4 background-color: pink; 5 transition: 1s; 6} 7div:hover{ 8 width:200px; 9}
效果图:
transition: 1s; 设置了width属性状态变化的过渡时间为1秒。
transition属性默认为:transition: all 0 ease 0;
transition:1s; 等价于 transition: all 1s ease 0;
animationanimation属性:比较类似于 flash 中的逐帧动画。学习过 flash的同学知道,这种逐帧动画是由关键帧组成,很多个关键帧连续的播放就组成了动画在 CSS3 中是由属性keyframes来完成逐帧动画的。
animation属性与transition属性的区别:
transition只需指定动画的开始和结束状态,整个动画的过程是由特定的函数控制,你不用管它。animation可以对动画过程中的各个关键帧进行设置演示代码:
1<div></div> 2
1div{ 2 width:50px; 3 height:50px; 4 background-color: pink; 5} 6div:hover{ 7 animation: change1 5s; 8} 9@keyframes change1{ 10 25% {width:130px;background-color: red;} 11 50% {width:170px;background-color: blue;} 12 75% {width:210px;background-color: green;} 13 100% {width:250px;background-color: yellow;} 14} 15
效果图:
JS动画其主要思想是通过setInterval或setTimeout方法的回调函数来持续调用改变某个元素的CSS样式以达到元素样式变化的效果。
javascript 实现动画通常会导致页面频繁性重排重绘,消耗性能,一般应该在桌面端浏览器。在移动端上使用会有明显的卡顿。
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <style type="text/css"> 6 #rect { 7 width: 200px; 8 height: 200px; 9 background: #ccc; 10 } 11 </style> 12</head> 13<body> 14 <div id="rect"></div> 15 <script> 16 let elem = document.getElementById('rect'); 17 let left = 0; 18 let timer = setInterval(function(){ 19 if(left<window.innerWidth-200){ 20 elem.style.marginLeft = left+'px'; 21 left ++; 22 }else { 23 clearInterval(timer); 24 } 25 },16); 26 </script> 27</body> 28</html> 29
上面的例子中,我们设置的setInterval时间间隔是16ms。一般认为人眼能辨识的流畅动画为每秒60帧,这里16ms比(1000ms/60)帧略小一些,但是一般可仍为该动画是流畅的。
在很多移动端动画性能优化时,一般使用16ms来进行节流处理连续触发的浏览器事件。例如对touchmove、scroll事件进行节流等。通过这种方式减少持续事件的触发频率,可以大大提升动画的流畅性。
canvas绘制动画canvas作为H5新增元素,是借助Web API来实现动画的。
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 *{ 8 margin:0; 9 padding:0; 10 } 11 </style> 12</head> 13<body> 14 <canvas id="canvas" width="700" height="550"></canvas> 15 <script type="text/javascript"> 16 let canvas = document.getElementById("canvas"); 17 let ctx = canvas.getContext("2d"); 18 let left = 0; 19 let timer = setInterval(function(){ 20 ctx.clearRect(0,0,700,550); 21 ctx.beginPath(); 22 ctx.fillStyle = "#ccc"; 23 ctx.fillRect(left,0,100,100); 24 ctx.stroke(); 25 if(left>700){ 26 clearInterval(timer); 27 } 28 left += 1; 29 },16); 30 </script> 31</body> 32</html>
注释:通过getContext()获取元素的绘制对象,通过clearRect不断清空画布并在新的位置上使用fillStyle绘制新矩形内容实现页面动画效果。
Canvas主要优势是可以应对页面中多个动画元素渲染较慢的情况,完全通过javascript来渲染控制动画的执行。可用于实现较复杂动画。
SVG是一种基于XML的图像格式,非常类似于HTML的工作方式。它为许多熟悉的几何形状定义了不同的元素,这些元素可以在标记中组合以产生二维图形。
同样高清的质地,矢量图不畏惧放大,体积小。
这里要说明一点就是,因为 SVG 中保存的是点、线、面的信息,与分辨率和图形大小无关,只是跟图像的复杂程度有关,所以图像文件所占的存储空间通常会比 png 小。
SVG动画的优势:
animate()方法animate() 方法执行 CSS 属性集的自定义动画。margin:30px")。字符串值无法创建动画(比如 "background-color:red")。代码演示:
1<button id="btn1">使用动画放大高度</button> 2<button id="btn2">重置高度</button> 3<div id="box" style="background:#98bf21;height:100px;width:100px;margin:6px;"> 4</div> 5
1$(document).ready(function(){ 2 $("#btn1").click(function(){ 3 $("#box").animate({height:"300px"}); 4 }); 5 $("#btn2").click(function(){ 6 $("#box").animate({height:"100px"}); 7 }); 8}); 9
效果图:
gif图片gif图想必大家都接触过,前端使用也非常简单。
css代码实现会简单一些,js复杂一些。 复杂动画的话:css代码就会变得冗长,js实现起来更优。js 比较灵活,能控制动画暂停,取消,终止等css动画不能添加事件,只能设置固定节点进行什么样的过渡动画。css 有浏览器兼容问题js大多情况下是没有的。css动画相对于优一些,css 动画通过GUI解析js动画需要经过js引擎代码解析,然后再进行 GUI 解析渲染。最近更新时间:2024-08-10

题库维护不易,您的支持就是我们最大的动力!