前言 今天我们来看看2019年的一些伟大的JavaScript动画库。在2002年左右,我们使用Flash来制作网络动画。...后来,我们开始使用JavaScript进行网页动画,效率高,重量轻。目前,我们甚至进一步采用CSS和SVG进行动画制作。但是,我们仍然需要JavaScript来制作高级动画。...资源地址 GSAP GSAP是一个JavaScript库,用于创建在每个主要浏览器中都可用的高性能动画。 ?...资源地址 AOS AOS(动画在滚动)比JavaScript更依赖于CSS。 ? 资源地址 Snabbt.js snabbt.js是一个最低限度的JavaScript动画库。它专注于移动物体。...它将转换、旋转、缩放、倾斜和调整元素的大小。通过包括矩阵乘法运算,变换可以以任何方式组合。然后通过CSS3变换矩阵设置最终结果。 ?
记住,我们是无法控制 DOM 事件触发频率的。 看下滚动事件的例子: 当使用触控板,滚动滚轮,或者拖拽滚动条的时候,一秒可以轻松触发30次事件。...Debounce 实例 调整大小的例子 调整桌面浏览器窗口大小的时候,会触发很多次 resize 事件。...看下面 demo: 如你所见,我们为 resize 事件使用了默认的 trailing 选项,因为我们只关心用户停止调整大小后的最终值。...可以使用 rAF API 替换 throttle 方法,考虑一下优缺点: 优点 动画保持 60fps(每一帧 16 ms),浏览器内部决定渲染的最佳时机 简洁标准的 API,后期维护成本低 缺点 动画的开始...总之: debounce:把触发非常频繁的事件(比如按键)合并成一次执行。 throttle:保证每 X 毫秒恒定的执行次数,比如每200ms检查下滚动位置,并触发 CSS 动画。
面试中,经常会问到: “重排与重绘的概念,什么情况触发,如何优化等” 本文就来解答下,上面的问题 01 渲染过程 首先,我们来了解下浏览器的渲染过程 浏览器生成渲染树的过程 02 重排与重绘概念 重排...重绘(repaint):是在一个元素的外观被改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。...比如: 页面渲染初始化;(无法避免) 添加或删除可见的DOM元素; 元素位置的改变,或者使用动画; 元素尺寸的改变——大小,外边距,边框; 浏览器窗口尺寸的变化(resize事件发生时); 填充内容的改变...比如,仅修改DOM元素的字体颜色(只有Repaint,因为不需要调整布局) 04 优化 重绘重排的代价:耗时,导致浏览器卡慢。 所以,需要优化来减少重绘重排的发生 css 优化 1....先隐藏元素,进行修改后再显示该元素,因为display:none上的DOM操作不会引发回流和重绘 4.
全局布局和增量布局 全局布局是指触发了整个渲染树范围的布局,一般是同步的,触发原因可能包括: 影响所有渲染对象的全局样式更改,例如字体大小更改。 屏幕大小调整。...在知道对一个元素应用哪些规则之后,浏览器即可开始计算它要占据的空间大小及其在屏幕的位置。...只有元素提升为合成层后,transform 和 opacity 才不会触发 paint,如果不是合成层,则其依然会触发 paint。...所以动画开始前创建合成层发生一次重绘,动画结束后独立的合成层被移除,移除后会引发重绘。...,但是也有很多情况无法压缩,合成过多导致层爆炸浏览器崩溃,卡顿等等情况。
如果图片很多,浏览器需要不断地调整页面。这不但影响速度,而且影响浏览体验。...当浏览器知道高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容,从而优化加载时间,提升浏览体验)。 7、哪些方法可以提升网站前端性能?...使用 requestAnimationFrame监听帧变化,以便在正确的时间进行渲染,增加响应变化的时间间隔,减少重绘次数。 使用节流模式(基于操作节流,或者基于时间节流),减少触发次数。...在浏览器地址栏中输入URL以后,浏览器首先要查询域名( hostname)对应服务器的IP地址,一般需要耗费20~120ms的时间。 DNS查询完成之前,浏览器无法识别服务器IP,因此不下载任何数据。...left属性实现的动画移动,原因是CSS动画属性会触发整个页面重排、重绘、重组。
如果图片很多,浏览器需要不断地调整页面。这不但影响速度,而且影响浏览体验。...当浏览器知道高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容,从而优化加载时间,提升浏览体验)。 7、哪些方法可以提升网站前端性能?...使用 requestAnimationFrame监听帧变化,以便在正确的时间进行渲染,增加响应变化的时间间隔,减少重绘次数。使用节流模式(基于操作节流,或者基于时间节流),减少触发次数。...在浏览器地址栏中输入URL以后,浏览器首先要查询域名( hostname)对应服务器的IP地址,一般需要耗费20~120ms的时间。DNS查询完成之前,浏览器无法识别服务器IP,因此不下载任何数据。...left属性实现的动画移动,原因是CSS动画属性会触发整个页面重排、重绘、重组。
绘制与合成:最后,浏览器根据更新后的渲染树和分层信息,重新绘制屏幕上的内容。回流由于涉及整个布局计算,所以相比重绘来说,是一个更消耗资源的过程。...背景样式变化:如修改元素的背景图片或背景图像的大小、重复方式等,如果这些变化不影响布局,就只会触发重绘。 边框样式调整:改变元素边框的样式、宽度或颜色,只要这些改动不引发布局变化,就属于重绘范畴。...文本样式变化:诸如字体大小、字体样式、文本装饰(如下划线、删除线)的变化,只要不影响元素尺寸和位置布局,就会触发重绘。...使用CSS Transform进行动画 硬件加速:transform属性尤其是translate3d可以触发硬件加速,使用GPU而非CPU来渲染动画,极大提高性能。...答案: 引起回流的操作包括但不限于: 添加或删除可见的DOM元素; 元素尺寸或位置的动态改变(例如,通过JavaScript修改元素的宽高或使用动画); 浏览器窗口尺寸变化,导致页面布局调整; 计算某些特定的
6、弹性布局 弹性布局即Flex布局,定义了flex的容器一个可伸缩容器,首先容器本身会根据容器中的元素动态设置自身大小;然后当Flex容器被应用一个大小时(width和height),将会自动调整容器中的元素适应新大小...transiton 还有一个结束事件 transitionEnd,该事件是在CSS完成过渡后触发,如果过渡在完成之前被移除,则不会触发transitionEnd 。...设置 animation-play-state:paused 可以暂停动画,设置 animation-fill-mode:forwards 可以让动画完成后定格在最后一帧。...和 transition相比,animation 设置动画效果更灵活更丰富,还有一个区别是:transition 只能通过主动改变元素的css值才能触发动画效果,而animation一旦被应用,就开始执行动画...,浏览器会通过重新复合来创建动画帧。
resizeBy(): 按照指定的像素调整open创建的窗口的大小。 resizeTo(): 把open创建的窗口的大小调整到指定的宽度和高度。 scroll(): 滚动窗口至文档中的特定位置。...setTimeout(): 在指定的毫秒数后调用函数或计算表达式。 stop(): 停止页面载入,相当于点击了浏览器的停止按钮。...窗口相关 onblur: 窗口失去焦点时触发。 onfocus: 窗口获得焦点时触发。 onresize: 窗口大小发生改变时触发。 onscroll: 窗口发生滚动时触发。...键盘相关 onkeydown: 某个键盘按键被按下时触发。 onkeyup: 某个键盘按键被松开后触发。 onkeypress: 某个键盘按键被按下并松开后触发。...onanimationiteration: 此事件将会在CSS动画到达每次迭代结束时触发,当通过执行最后一个动画步骤完成对动画指令序列的单次传递完成时,迭代结束。
推荐使用 CSS 属性 will-change,该属性能够在元素的属性改变之前通知浏览器。 需要衡量浏览器在处于运行时渲染模式下的性能,可以参考浏览器渲染优化、如何正确的使用 GPU。...避免大规模、复杂的布局 布局,就是浏览器计算 DOM 元素的几何信息的过程:元素大小和在页面中的位置。...元素所在的层提升为合成层后可以减少 Repaint 使用 transform 或 opacity 实现动画,对于独立的合成层应用 transform 和 opacity 是不会触发 Repaint的,因此尽量对...layout 和 paint 对于诸如 fixed 的合成层,移动时不会触发 repaint 提升动画效果的元素 合成层的好处是不会影响到其他元素的绘制,因此,为了减少动画元素对其他元素的影响,从而减少...防止层爆炸 同合成层重叠也会使元素提升为合成层,虽然有浏览器的层压缩机制,但是也有很多无法进行压缩的情况。
它是一个小型、免费、开源的库,为网站开发提供了许多有用的功能,例如 AJAX、轻松操作 DOM(CSS、HTML)、处理事件、动画效果等。...06、Anime.js 地址:https://animejs.com/ Anime.js 是一个库,通过使用 CSS 属性、SVG、DOM 属性、JavaScript 对象,可以轻松地为网页构建快速动画...07、AOS 地址:https://michalsnik.github.io/aos/ AOS 可帮助您在用户滚动网页时为网站元素创建动画效果。...但是,它也有一些限制,例如,初学者很难使用,或者它不能在 IE8 等较旧的浏览器上运行。...我喜欢这个库的一点是,您可以通过删除在下载过程中不使用的编程语言来减少 highlight.js 的大小。 对于服务器端,您可以使用 yarn 或 npm 来安装它。
弹性布局 即Flex布局,定义了flex的容器一个可伸缩容器 容器本身会根据容器中的元素动态设置自身大小 当Flex容器被应用一个大小时(width和height),将会自动调整容器中的元素适应新大小...,则不会触发transitionEnd animation 需要设置一个@keyframes,来定义元素以哪种形式进行变换 然后再通过动画函数让这种变换平滑的进行,从而达到动画效果 动画可以被设置为永久循环演示...animation-play-state:paused可以暂停动画 animation-fill-mode:forwards 可以让动画完成后定格在最后一帧 可以通过JS监听animation的开始、...对比 animation 设置动画效果更灵活更丰富 transition 只能通过主动改变元素的css值才能触发动画效果,而animation一旦被应用,就开始执行动画 2.7....,浏览器会通过重新复合来创建动画帧。
浏览器事件 常用浏览器事件与DOM事件,包括鼠标事件、键盘事件、框架/对象事件、表单事件、剪贴板事件、打印事件、拖动事件、多媒体事件、动画事件、过渡事件。...浏览器事件 加载相关 onbeforeunload: 该事件在即将离开页面(刷新或关闭)时触发。 onload: 文档加载完成后触发。 onunload: 当窗口卸载其内容和资源时触发。...onpageshow: 该事件在用户访问页面时触发 onpagehide: 该事件在用户离开当前网页跳转到另外一个页面时触发 onresize: 窗口或框架被重新调整大小。...onloadeddata: 事件在浏览器加载视频/音当前帧时触发触发。 onloadedmetadata: 事件在指定视频/音频的元数据加载后触发。...onplaying: 事件在视频/音频暂停或者在缓冲后准备重新开始播放时触发。 onprogress: 事件在浏览器下载指定的视频/音频时触发。
background-size background-size属性常用来调整背景图片的大小,主要用于设定图片本身。...元素本身占有的空间就会被其他元素占有,也就是说它会导致浏览器的重排和重绘。 消失后,自身绑定的事件不会触发,也不会有过渡效果。 特点:元素不可见,不占据空间,无法响应点击事件。....hidden{ visibility:hidden } 给人的效果是隐藏了,所以他自身的事件不会触发。 特点:元素不可见,占据页面空间,无法响应点击事件。...如果利用 animation 动画,对 opacity 做变化(animation会默认触发GPU加速),则只会触发 GPU 层面的 composite,不会触发重绘。...它类似于flash的补间动画,设置一个开始关键帧,一个结束关键帧。 animation是动画属性,它的实现不需要触发事件,设定好时间之后可以自己执行,且可以循环一个动画。
一般来说,品牌介绍页都是少不了各种动画的。这里我列出了辅导品牌页的三个主要的动画,后面我会讲我的实现 隧道动画: ? 页面滑动到隧道位置的时候,会触发隧道动画的自动播放。...AI教学动画 ? 当页面滑动到AI教学模块时候触发AI模块动画的自动播放。可以看到有四部分的动画:上面数字的变化,下面的小男孩动画、轴动画以及文字的动画。...好在有将apng转换成canvas的库,转换成canvas后,在不支持apng的浏览器中,也可以播放apng。 本次我用到的转换库是apng-canvas。...并且由于svg是矢量图,所以动画效果不会因为分辨率大小的原因而产生失真。 当然,lottie也有其缺点,就是对于一些动画效果,lottie无法完全还原。...具体表现为,在一些复杂的动画下,会丢失一些倾斜度、渐变或者色彩不正确。 3. 品牌页动画实现 隧道动画: ?
@honkinglin (#1858)Table: @chaishi (#1849) 修复本地数据分页场景中,切换分页大小,onPageChange 事件参数返回的数据不正确问题序号列支持跨分页显示...issue#1747AutoComplete: 支持使用 triggerElement 自定义触发元素 @chaishi (#1848)Input: 宽度自适应 auto-width 支持中文拼音输入也实时调整宽度...,issue#2079 @chaishi (#1853)Dialog: 修复 destroyOnClose 设置后关闭弹窗无动画效果问题 @honkinglin (#1857)TagInput: @chaishi...@chaishi (#2087)修复拼音输入时按下删除键触发标签删除问题,当在拼音输入完成后允许删除标签(issue#1857) @chaishi (#2087)Image: 修复 placeholder...@uyarn (#1766) Bug FixesTable: 减少表格重渲染 #1688 @jsonz1993 (#1704)修复本地数据分页场景中,切换分页大小,onPageChange 事件参数返回的数据不正确问题
例如 canvas的大小将被动态调整为容器宽度或高度按照画布比例的最小值...虽然bodymovin提供了在已有canvas上渲染的能力,实测试效果并不理想,且没有api文档说明如何进行调整。所以建议控制container的大小来控制动画的大小。...步骤是: 通过anim.totalFrames获取到动画的总帧数。 和设计沟通一下,得知前30帧是出现,后30帧是消失。 将前30帧和后30帧拆分成两个不同的片段。在点击事件中分别播放。...segmentStart不同片段播放开始时候触发,如果是相同片段的循环,第一次后就不会触发此事件了。 坑 目前bodymovin的文档支持得不是太好。git上的issue能解决的问题也很有限。...(采用QQ X5内核) 同时播放N个动画 N IOS(iphone) Android(MOTO X1085) 1 表现良好 明显掉帧 3 轻微掉帧 无法正常播放 5 明显掉帧 无法正常播放 所以,这个动画框架在低端
大体就是这样,不过浏览器还会有一些奇怪的优化。 注意: 1、为什么从后往前匹配因为效率和文档流的解析方向。效率不必说,找元素的父亲和之前的兄弟比遍历所哟儿子快而且方便。...它的特殊之处在于它不用像absolute疯狂“找爸爸”,它天生参照于浏览器窗口!当为对象设置固定定位后,该对象即处于浏览器窗口画面中的固定位置,无视文档长短、窗口大小和滚条滚动。...改变transform或opacity不会触发浏览器重新布局(reflow)或重绘(repaint), 只会触发复合(compositions)(复合是什么,我也不懂,没听说过,有知道的朋友可以在留言区告诉我...transform使浏览器为元素创建一个 GPU 图层 translate改变位置时,元素依然会占据其原始空间 而改变绝对定位会触发重新布局,进而触发重绘和复合。 改变绝对定位会使用到 CPU。...高性能CSS3动画 动画中尽量少使用能触发layout和paint的CSS属性,使用更低耗的transform、opacity等属性 尽量减少或者固定层的数量,不要在动画过程中创建层 尽量减少层的更新(
改变transform或opacity不会触发浏览器重新布局(reflow)或重绘(repaint),只会触发复合(compositions)。 ⽽改变绝对定位会触发重新布局,进⽽触发重绘和复合。...(浏览器)来自动调整显示大小。...属性值: percentage:字体显示的大小; auto:默认,字体大小会根据设备/浏览器来自动调整; none:字体大小不会自动调整 html { -webkit-text-size-adjust...总结 Zoom 非标属性,有兼容问题,缩放会改变了元素占据的空间大小,触发重排。...CSS动画 优点 浏览器可以对动画进行优化; 代码相对简单,性能调优方向固定; 对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码; 缺点 运行过程控制较弱,无法附加事件绑定回调函数
界面的问题 修复项目构建后压缩纹理可能会缺失的问题(感谢 xu.lidong) 修复压缩纹理配置 Quality 为 100,打包无法输出图片文件的问题 修复脚本移动或重命名后可能会报错的问题 修复动画编辑器设置节点...z 值无效的问题 优化了 动画编辑器 在组件、资源等状态发生变化时的错误处理 修复场景编辑器中 gizmo 位置不对的问题 修复节点旋转无法 undo 的问题 修复属性检查器设置 Camera 的 Rect...修复层级管理器和资源管理器合并到同一个面板时,内容显示不全的问题 Engine 修复场景延迟加载资源会导致 3D 模型无法显示的问题[#5071] 修复某些 3D 骨骼动画渲染不全的问题 [#5349...IE11 的支持(Improve support for IE11)[#5033] 修复在 Edge 浏览器上点击 EditBox 的清除按钮(浏览器自带的),不会触发 input 事件的问题[#5088...] 修复 EditBox 在输入过程中文本大小未能随 Node 进行缩放的问题[#5088] 修复 Edge 和百度浏览器上不能播放音频的问题[#4910] 修复桌面端 Chrome 和 Safari
领取专属 10元无门槛券
手把手带您无忧上云