iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS中Animations和Transitions的工作原理是什么
  • 618
分享到

CSS中Animations和Transitions的工作原理是什么

2024-04-02 19:04:59 618人浏览 薄情痞子
摘要

这篇文章主要介绍“CSS中Animations和Transitions的工作原理是什么”,在日常操作中,相信很多人在CSS中Animations和Transitions的工作原理是什么问题上存在疑惑,小编查

这篇文章主要介绍“CSS中Animations和Transitions的工作原理是什么”,在日常操作中,相信很多人在CSS中Animations和Transitions的工作原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中Animations和Transitions的工作原理是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在这篇文章中,我们将会去探究一下浏览器是如何去处理CSS Animations和CSS Transitions的,以便使你在写一些动画效果之前就可以对该动画在浏览器中运行效果有一个心理预判。有了这些预判,你就可以设计出一些在浏览器中运行流畅的动画效果,从而带来更流畅的用户体验。

浏览器的内部工作

让我们了解一些浏览器的工作原理,一探究竟。一旦我们了解了浏览器是如何工作的,我们就可以更好的去驾驭它。

现代浏览器通常拥有两个重要的执行线程,这两个线程相互配合来渲染出页面:

    主线程

    排版线程

通常情况下,主线程主要负责以下工作:

    运行javascript

    计算html元素的CSS样式

    布局页面

    把页面元素绘制成一个或多个位图

    把这些位图移交给排版线程

通常情况下,排版线程主要负责以下工作:

    通过GPU渲染位图,并显示在屏幕上

    向主线程请求更新位图的可见部分或即将可见的部分

    判断出当前页面处于可见的部分

    判断出即将通过页面滚动而可见的部分

    随着用户滚动页面来移动这些部分(译者注:可见部分的和即将可见的部分)


当长时间运行JavaScript或渲染一个很多的元素时,主线程会一直处于忙碌状态。在这期间它不会对用户的输入做出任何反应。

在另一方面,排版线程对用户输入保持着非常快的响应。当页面变化时,排版线程尝试以每秒60帧的速度去重绘页面,即便这时页面还不完整。

举例来说,当用户滚动页面时,排版线程向主线程请求更新页面新显示部分的位图,但是,如果此时主线程并不能迅速响应请求,排版线程并不会去等待响应,它会用它目前所拥有的这部分页面的内容去渲染页面,由于对应的内容还没有,所以会以白板的形式渲染出来。

GPU

我前边提到过排版线程通过GPU把位图绘制到了屏幕上。让我们快速的过一下GPU相关的东西。

GPU是一种芯片,在今天的大多数手机,平板以及电脑中都能发现它的身影。它是非常专业的,这意味着GPU在某些方面非常擅长,但是在另外一些方面去表现不好。

GPU比较擅长于:

    绘制位图到屏幕

    重复的绘制同一个位图

    在不同的位置,以不同的旋转角度,或者不同的缩放大小来绘制同一个位图。

GPU相对慢的地方:

    将位图加载到显存里。


transition: height

现在我们已经在软件层面和硬件层面对如何渲染页面有了一个粗略的认识。接下来,让我们看一下浏览器的主线程和排版线程是如何协同工作来完成一个CSS Transition的。

假设我们想要将一个元素的高度值从100px转换到200px,如下所示:
 

CSS Code复制内容到剪贴板

  1. div {   

  2.     height: 100px;   

  3.     transition: height 1s linear;   

  4. }   

  5.      

  6. div:hover {   

  7.     height: 200px;   

  8. }  

主线程和排版线程会根据下图所示时序图来完成这个Transition。注意:在橙色方框中的操作是潜在的耗时操作,蓝色方框中的操作是较快的操作。
CSS中Animations和Transitions的工作原理是什么

正如你所见,整个过程有很多橙色的方框,意味着浏览器有相当繁重的工作要处理,也意味着这个Transition可能会出现卡顿。

在整个Transition的每一帧中,浏览器都要去重新布局,绘制页面,并把最新的位图对象加载到GPU。我们前边了解过,把位图对象加载到GPU的内存中是个相对缓慢的操作。

浏览器之所以要在每一帧动画上处理如此繁重的工作是因为这个元素的内容一直在变化。修改一个元素的高度可能会引起其子元素也要相应的改变大小,因此浏览器必须去重新布局。重新布局后,主线程必须为该元素重新生成位图对象。

transition: transform

由此可见,对高度进行的Transition相对来说性能比较差,那有一些性能比较好的Transition吗?

假设我们想要把一个元素从一半大小缩放到实际大小,并假设我们使用CSS的transfORM 属性来对它进行缩放,同时使用CSS的transition属性来生成缩放的动画效果,如下所示:
 

CSS Code复制内容到剪贴板

  1. div {   

  2.     transform: scale(0.5);   

  3.     transition: transform 1s linear;   

  4. }   

  5.      

  6. div:hover {   

  7.     transform: scale(1.0);   

  8. }  

让我们看下一下这个例子的时序图:
CSS中Animations和Transitions的工作原理是什么

我们看到只有很少的几个橙色的方框,意味着这个动画效果可能会很流畅!那么,一个元素的transform动画效果与其高度的动画效果有什么不同呢?


根据定义,CSS的transform属性不会改变元素的布局,也不会影响到其周围的元素。它把元素当做一个整体看待——缩放整个元素、旋转整个元素或者移动整个元素。

这对浏览器来说是一个好消息!浏览器只需在动画开始的时候生成这个元素的位图对象,并把它传递给GPU。在这之后,浏览器无需再做任何重新布局,绘制页面以及传递位图对象的操作了,相反,浏览器可以利用GPU擅长的绘制的特点来快速的在不同的位置,旋转或缩放同一个位图对象。

设计决策
那么,是否这就意味这我们不要去缓动一个元素的高度?非也,一些情况下,这是你的设计效果的一部分,并且动画效果可以非常快的完成。也许动画的元素是孤立的,不会引起页面其他部分进行重新布局;也许该元素只是单纯的进行重绘,浏览器可以快速的完成;也许该元素很小,浏览器只需将很小的位图对象传递给GPU。

当然了,在不影响你设计的视觉效果的情况下,最好去缓动一个性能较好的CSS属性,如transform,而不是去缓动一个性能较差的CSS属性,如height。举例来说,假设你的设计中有一个按钮,当点击它的时候会出来一个菜单,试着去缓动菜单的transform属性来显示它而不是缓动它的top或height属性来达到类似的效果。


在动画上特别快的CSS属性包括:

    CSS transform

    CSS opacity

    CSS filter (依赖于过滤器的复杂度和浏览器)

目前这个列表是非常有限的,但是随着浏览器的进步,你将会看到越来越多的CSS属性在动画中变得越来越快。另外,不要轻视当前的列表。你可能会很惊讶你能通过组合这些属性创造出许多丰富的效果。

到此,关于“CSS中Animations和Transitions的工作原理是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: CSS中Animations和Transitions的工作原理是什么

本文链接: https://www.lsjlt.com/news/76696.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS中Animations和Transitions的工作原理是什么
    这篇文章主要介绍“CSS中Animations和Transitions的工作原理是什么”,在日常操作中,相信很多人在CSS中Animations和Transitions的工作原理是什么问题上存在疑惑,小编查...
    99+
    2024-04-02
  • DIV+CSS的工作原理是什么
    这篇文章主要介绍“DIV+CSS的工作原理是什么”,在日常操作中,相信很多人在DIV+CSS的工作原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DIV+CSS的工作...
    99+
    2024-04-02
  • Vue3中key的作用和工作原理是什么
    这篇文章主要介绍“Vue3中key的作用和工作原理是什么”,在日常操作中,相信很多人在Vue3中key的作用和工作原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中key的作用和工作原理是什么...
    99+
    2023-06-20
  • css开发中Magic Animations是什么
    这篇文章给大家分享的是有关css开发中Magic Animations是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Magic Animations 是一个具备独特的 ...
    99+
    2024-04-02
  • nginx作用和工作原理是什么
    nginx是一种高性能的开源Web服务器和反向代理服务器。它可以用于处理静态和动态的HTTP、HTTPS、SMTP、POP3和IMA...
    99+
    2023-10-07
    nginx
  • Angular中zone.js的工作原理是什么
    这篇文章主要介绍“Angular中zone.js的工作原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Angular中zone.js的工作原理是什么”文章能...
    99+
    2024-04-02
  • c#中filter的工作原理是什么
    在C#中,filter通常指的是LINQ中的Where方法,用于筛选集合中符合条件的元素。其工作原理是通过传入一个谓词(P...
    99+
    2024-04-02
  • Android中AsyncTask的工作原理是什么
    这篇文章给大家分享的是有关Android中AsyncTask的工作原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述实际上,AsyncTask内部是封装了Thread和Handler。虽然AsyncTa...
    99+
    2023-06-15
  • PHP中Opcache的工作原理是什么
    小编给大家分享一下PHP中Opcache的工作原理是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP项目中,尤其是在高并发大流量的场景中,如何提升PHP的响应时间,是一项十分重要的工作。而Opcache又是优化PH...
    99+
    2023-06-22
  • python中WSGI的工作原理是什么
    这篇文章将为大家详细讲解有关python中WSGI的工作原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所...
    99+
    2023-06-14
  • Android中的SurfaceFlinger工作原理是什么
    这篇文章将为大家详细讲解有关Android中的SurfaceFlinger工作原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概念SurfaceFlinger是一个系统服务,如:au...
    99+
    2023-06-22
  • puppet的工作原理是什么
    今天小编给大家分享一下puppet的工作原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Puppet 的介绍什么是P...
    99+
    2023-06-28
  • JVM工作原理和特点是什么
    本篇文章给大家分享的是有关JVM工作原理和特点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们运行和调试Java程序的时候,经常会提到一个JVM的概念,这里向大家描述一...
    99+
    2023-06-17
  • NTPD的工作原理是什么
    今天小编给大家分享一下NTPD的工作原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Network Time Pro...
    99+
    2023-06-28
  • Torrents的工作原理是什么
    本篇内容主要讲解“Torrents的工作原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Torrents的工作原理是什么”吧!Torrents 是如何工作的?假设 ‘...
    99+
    2023-06-27
  • RabbitMQ的工作原理是什么
    这篇文章给大家介绍RabbitMQ的工作原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。RabbitMQ简介在介绍RabbitMQ之前实现要介绍一下MQ,MQ是什么?MQ全称是Message Queue,可以理...
    99+
    2023-06-19
  • ipsec的工作原理是什么
    IPSec(Internet Protocol Security)是一种用于保护网络通信安全的协议套件。它可以提供数据加密、数据完整...
    99+
    2023-10-10
    ipsec
  • chatgpt的工作原理是什么
    chatgpt的工作原理是以电子邮件和电子传真方式为用户提供多媒体信息传输,利用一个基于网络的、安全的点对点通讯系统为用户进行多人的...
    99+
    2023-02-09
    chatgpt
  • Hadoop的工作原理是什么
    Hadoop的工作原理是基于分布式存储和计算的概念。Hadoop由两个核心组件组成:Hadoop分布式文件系统(HDFS)和MapR...
    99+
    2024-03-11
    Hadoop
  • prometheus的工作原理是什么
    Prometheus 是一种开源的监控系统,用于记录实时的指标数据。其工作原理主要包括以下几个步骤: 采集数据:Promethe...
    99+
    2024-03-12
    Prometheus
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作