前端开发中web和移动端动画的常见实现方式

简介: 前端动画一般在展示性网站、交互操作或者移动端活动页面使用比较多,可能对于大部分前端平时只会用 css 里的 transition 动画,其实前端动画还有很多实现方式

前端动画一般在展示性网站、交互操作或者移动端活动页面使用比较多,可能对于大部分前端平时只会用 css 里的 transition 动画,其实前端动画还有很多实现方式,下面是常见的几种形式:

  • css 动画
  • js 动画
  • SVG 动画
  • Canvas 动画
  • WebGL 动画
  • gif 动图
  • 图片+位移模拟动画
  • 视频
  • flash 动画

css 动画

css 动画应该是前端工作中用得最多的,兼具性能和丰富的动画效果,很多常见的第三方动画库也都是基于 css 实现的。

transition 动画

用来实现 DOM 元素形变或位移动画,也是大部分前端工作中最常用的动画形式,一般 web 上很多交互操作动效都是用这个实现的,简单好用。

animation 关键帧动画

css3 里新出的关键帧动画,比 transition 强大数倍,可以实现各种酷炫的动画效果。关键帧的意思就是我们只需要定义动画的几个关键节点的值,animation 会自动根据计时函数插值计算出来中间的步骤,实现比较平滑的动画效果,使用时需要配合 @keyframes 来定义关键帧。

animation 是以下8个属性的简写形式:

  • animation-name:要绑定的 @keyframes 关键帧动画名
  • animation-duration:动画时长
  • animation-timing-function:动画计时函数、速度曲线,可以用预制关键字或者cubic-bezier()函数自定义贝塞尔曲线、steps()函数直接设置要多少步
  • animation-delay:动画开始前延迟的时长
  • animation-iteration-count:动画次数,无限循环 infinite
  • animation-direction:设置是否可以反向播放动画
  • animation-fill-mode:设置 CSS 动画在执行之前和之后如何将样式应用于其目标,一般用来解决动画停止后界面闪现问题
  • animation-play-state:设置动画是运行还是暂停,可以配合 js 来实现中途让动画停止

animation 的简写其实也没啥规则,就是直接往后面随便堆,css会有一套自己的解析规则来直接从里面取,具体可以参考 MDN,看着脑阔痛,推荐还是别简写了。

js 动画

严格来说 js 动画不算一个单独的动画,因为一般需要利用 js 里的定时器配合像 DOM 元素、Canvas 才能实现动画效果。

setTimeout 定时器

通过 setTimout、setInterval 定时器不断更新元素的状态位置等来实现动画,要求画面的更新频率要达到大部分屏幕要求的每秒60次才能让肉眼看到比较流畅的,受不同屏幕和定时器执行时间影响,动画中间容易出现丢帧的情况。

setInterval(function() {
   
  // 执行动画任务
}, 1000 / 60)

requestAnimationFrame 定时器

除了定时器还有 HTML5 新出的 requestAnimationFrame,专门为实现高性能的帧动画而设计的一个API。它的作用就是告诉浏览器你希望执行一个动画,让浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。

若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用 requestAnimationFrame(),这样就能实现动画效果了。

和 setTimeout 定时器类似,requestAnimationFrame 也可以通过 cancelAnimationFrame 取消回调函数请求。相比 setTimeout 有两点优势:

  • 跟屏幕刷新频率保持一致,不会出现像 setTimeout 丢帧的情况
  • 性能更好,运行在后台标签页或者隐藏的 iframe 里时,requestAnimationFrame() 会被暂停调用以提升性能和电池寿命
function animate() {
   
  // 执行动画任务
  requestAnimationFrame(animate)
}
requestAnimationFrame(animate)

上面代码实际使用的时候注意回调函数的 this 指向,最好用箭头函数去定义。

SVG 动画

SVG(Scalable Vector Graphics)可伸缩矢量图形,基于 xml 语法,和我们常见的 png、jpg 等位图相比,它的文件容量较小,在进行放大、缩小或旋转等操作时图象不会失真。

HTML5 中是支持内联 SVG 的,所以我们可以将 svg 标签当作 html 标签直接在页面结构中使用,成为 DOM 的一部分,然后用 JavaScript 和 CSS 都是可以对其进行操作的,所以 css 的动画效果也都是可以直接作用在 svg 元素上的。

除此之外,SVG 中也自带 animate 元素,可以直接用来创建动画,css 中的动画效果也都能用其实现,相比 css 动画 svg 可以实现出更加复杂的动画效果,如路径动画、描边动画等,很多网站的 logo 动画就是用 svg 来实现的。

Canvas 动画

使用 canvas 绘制动画原理就是,配合 js 定时器不断的绘制擦除图形,当绘制的速度够快,看上去就像动起来了一样,适合用来实现一些复杂的自定义场景动画。

WebGL 动画

WebGL 在前端领域也是一项很热门的技术,它可以在网页上绘制和渲染三维图形,并且让用户与其进行交互。前面我们提到的各种动画都是基于 2D 的二维图形动画,像 css 动画中虽然也有 z 轴的概念,但是和真实的三维效果还是有很大差距的。

像常见的线上看房开车、全景展示、产品展示等都有用到 WebGL 技术,其中大名鼎鼎的三维模型库 Three.js 应该很多人都听过,开发成本比较高,即使有经验的前端工程师也需要系统学习后才能上手。

gif 动图

设计师直接导出 gif 动图,适合一些简单的动画,直接利用 PS 里的动作就可以完成制作,基本没啥前端工作量,简单适配性好不过容易出现颜色失真或者边缘出现锯齿。

图片+位移模拟动画

这个其实跟 gif 图类似,只不过把 gif 图的每一帧导出成单独的 png 图片再拼成雪碧图,前端利用 css 的 transition、animation 来做位移模拟实现动画的效果,跟以前放电影有点类似,把静态的图片在一个固定的视窗内不断移动,让人看着就像动起来了一样。

视频

直接放一个 video 视频,有的展示性网站会采用这种方式,直接整块网页背景放个 video 视频,让人看着像动画的效果,实现简单有音画效果,但是视频往往会很大。

flash 动画

flash 动画是一种基于 Adobe Flash 技术创建的动态图像或影片,它可以在网页中播放。flash 动画通常包含矢量图形、位图、音频、视频等多种元素,具有高质量的图像和动态效果。不过会影响网页的性能,特别是在移动设备或低端设备上,现在差不多灭绝了,属于过时了的技术。

目录
相关文章
|
16天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
30 3
|
6天前
|
前端开发 UED 开发者
揭秘!前端大牛们如何巧妙利用动画效果,提升用户体验感!
前端开发中,动画不仅是美化网页的手段,更是提升用户体验的关键。本文介绍了三种常见的动画技术:渐进加载动画、过渡动画和SVG动画,分别用于提升页面响应速度、增强交互性和传递情感信息,帮助网页焕发新生。
14 4
|
6天前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
15 3
|
13天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
13天前
|
前端开发 JavaScript API
前端开发的秘密武器:这些工具让你轻松应对各种复杂动画效果!
【10月更文挑战第30天】前端开发中,动画效果为页面增添了无限生机。CSS3的@keyframes规则和JavaScript动画库如GSAP、Anime.js等,使开发者能轻松实现从简单到复杂的动画效果。掌握动画原理和设计原则,结合工具和库,可以创造出既美观又实用的动画,提升用户体验。
37 4
|
17天前
|
前端开发 JavaScript
Bootstrap Web 前端 UI 框架
Bootstrap 是快速开发 Web 应用程序的前端工具包。
30 3
|
17天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
17天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
33 2
|
18天前
|
开发框架 前端开发 JavaScript
Web前端框架
Web前端框架等名词
16 2
|
28天前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!

热门文章

最新文章