目錄
第一章 JavaScript动画与CSS动画
JS动画性能不是问题
JS动画独有的功能
第二章 使用Velocity.js实现动画
第三章 动效设计理论
第四章 动画工作流
CSS动画工作流
CSS的问题
什么时候用CSS
代码技巧:将样式与逻辑分离
一般做法
优化做法
代码技巧:组织排序动画
代码技巧:打包效果
第五章 文本动画
第六章 SVG入门
第七章 动画性能
布局颠簸
解决办法
避免影响临近的元素
优先考虑 opacity胜于 color
不用持续响应scroll和resize事件
减少图片渲染
首頁 web前端 html教學 《JavaScript网页动画设计》读书笔记_html/css_WEB-ITnose

《JavaScript网页动画设计》读书笔记_html/css_WEB-ITnose

Jun 24, 2016 am 11:27 AM

这两天开始看《Javascript网页动画设计》,这里总结一下。这个库我之前用过,很方便也很流畅。但是里面除了第四章介绍了动画工作流和第七章介绍了动画性能外,都是介绍 Velocity 这个库的,或许叫『Velocity动画设计』更为妥当。

这里姑且记录一下,过一阵开始总结『web动画』这个主题。

第一章 JavaScript动画与CSS动画

JS动画性能不是问题

  • CSS 适合悬停状态的动画
  • JS动画和CSS动画一样快
  • 不要将JS与jQuery混为一谈
  • Velocity.js

JS动画独有的功能

  • 页面滚动:页面滚动到某个元素上
  • 动画反转:元素以动画形式变动回上一个动画开始之前的值
  • 物理动效:摩擦力

第二章 使用Velocity.js实现动画

动画的种类:

  • CSS动画: transition / animation
  • JS动画:GSAP、Velocity.js
  • canvas动画:Fabric.js
  • SVG动画:Snap.js 、SVG.js
  • WebGL动画:Three.js

详情可以看 这里

缓动方程

第三章 动效设计理论

这一章全是在讲理论的东西,难道买错书了?

第四章 动画工作流

CSS动画工作流

为了更好地管理UI动画工作流,开发人员有时会放弃JS而使用CSS。但是,一旦动画的复杂度达到了中等或更高水平,那么使用CSS动画通常会使工作流变得明显比用JS更加糟糕。

CSS的问题

CSS利用关键帧来实现复杂动画序列:

@keyframes myAnimation{    0%{opacity:0;transform:scale(0,0)}    25%{opacity:1;transform:scale(1,1)}    50%{transform:translate(100px,0)}    100%{transform:translate(100px,100px)}}#box{animation:myAnimation 2.75s}
登入後複製

如果要把 opacity 动画时长增加1秒,其他属性动画时长不变,就必须要重新计算,才能使百分比各处的属性值与增加1秒后的时长匹配起来。

什么时候用CSS

当用户鼠标悬停在元素上时触发的简单样式变化,使用 transition

代码技巧:将样式与逻辑分离

一般做法

在jQuery中,主要由两种动画方式:

  • 利用 addClass() 和 removeClass() 切换样式
  • 使用 animate() : $ele.animate({opacity:1,top:50},1000)

第一种方法更值得推荐,因为它的代码组织得清楚,改样式就改CSS,改逻辑就改JS。

优化做法

定义一个JS对象,该对象的内容是要设置的CSS属性。然后将其传入Velocity或jQuery中。

//style.jsvar fadeIn = {    p: {        opacity: 1,        top: "50px"     },    o: {        duration: 1000,        easing: "linear"        }}//main.js$element.velocity(fadeIn.p,fadeIn.o);
登入後複製

这样使用 style.js 有一个独有的能力——定义动画选项。

代码技巧:组织排序动画

Velocity 有一个名为 UI pack 的插件,能够优化UI动画工作流。

$element    .velocity({translateX:100})    .velocity({translateY;100})
登入後複製

代码技巧:打包效果

$.Velocity.RegisterEffect("growIn",{    defaultDuration: duration,    calls: [        [ {opacity:1,scale:1},0.4 ],        [ {boxShadowBlur:50},0.6 ]    ]})$element.velocity("growIn")
登入後複製

第五章 文本动画

网页上很少使用文本动画,这里介绍几种工具帮你免于文本动画枯燥乏味的一面,提供高效的工作流。

Blast.js

Blast能够将页面上的文本进行拆分

结合 velocity.js 和 velocity-ui

第六章 SVG入门

Snap.svg

SVG 动画,在原本应该使用图片的位置使用它:

  • 具有复杂动画序列的按钮,用户悬停鼠标或点击鼠标时会触发这些动画序列
  • 独特的加载状态图形,可以用来替代老掉牙的gif图
  • 公司logo,页面加载时,logo的各个部分可以一起以动画形式呈现

第七章 动画性能

布局颠簸

设置(set)、查询(get)一个元素的CSS属性是引发性能开销的两个核心浏览器进程(另外还有图形渲染)。

在为元素设置新属性后,浏览器必须计算你这次更改所产生的后续影响。例如,改变一个元素的宽度会导致一系列连锁反应;它的父级元素、兄弟元素和子元素的宽度根据自己的CSS属性也要调整。

由设置和获取样式的交替而导致的UI性能降低称为 布局颠簸

浏览器已经为页面布局的重新计算进行了高度优化,但由于布局颠簸,优化效果大打折扣。

例如,浏览器已经可以将同一时间的获取操作优化成一个单一、流畅的操作,因为浏览器在第一次获取之后可以缓存页面的状态,然后在后续每次获取操作时,参考那个状态。但是,如果反复执行获取后又设置,就让浏览器去做了很多繁重的工作,因为设置所做的更改会不断地使其缓存失效。

布局颠簸在动画循环中出现的话,对性能更是雪上加霜,最后就是让动画变得卡顿。

解决办法

把DOM的设置和获取的操作分别集合在一起批量操作

//糟糕的做法var currentTop = $('element').css('top'); //get$('element').style.top = currentTop + 1; //setvar currentLeft = $('element').css('left'); //get$('element').style.left = currentLeft + 1; //set
登入後複製

如果把查询放在一起,把设置放在一起,那么浏览器就可以打包相应操作,减少代码造成的布局颠簸的影响:

var currentTop = $('element').css('top'); //getvar currentLeft = $('element').css('left'); //get$('element').style.top = currentTop + 1; //set$('element').style.left = currentLeft + 1; //set
登入後複製

比如,点击按钮切换 none 和 block ,可能会先要检查侧边菜单的 display 属性是设置成 none 还是 block ,然后再相应地进行值得替换。检查是一次『获取』,之后无论设置成什么是一次『设置』。

想要优化的话,可以在设置一个变量,每当按钮点击的时候,这个变量跟着更新,然后在切换可见性之前,查询这个变量就可以得知菜单的当前状态了。『获取』的过程就可以省掉了。

避免影响临近的元素

有很多CSS属性,一经改变,就会造成临近元素尺寸或位置的调整,其中包括 top、right、bottom、left,margin、padding,border,以及width、height

解决办法

尽可能设置CSS的transform属性(translate、scale、rotate)的动画。transform属性的特殊之处在于它们将目标元素提升至一个单独的层,这个层可以独立于页面其他内容单独渲染(通过GPU加速提升性能),因此相邻的元素不会受到影响。

优先考虑 opacity胜于 color

opacity是另一个可以让GPU渲染加速的CSS属性,因为它不影响元素的位置。

比如,当用户鼠标悬停在元素上时color属性会改变,那么请考虑使用opacity动画来替代。如果最终效果和设置颜色的动画效果差不多,那么留用设置opacity动画吧。

请查看 CSSTrigger.com 上的内容,了解每个CSS属性如何影响浏览器性能。

不用持续响应scroll和resize事件

浏览器的scroll和resize是两个触发频率非常频繁的事件类型:每当用户调整或滚动浏览器窗口时,浏览器都会在每秒内触发多次与这些事件相关的回调函数。窗口scroll或resize的时候会多次触发事件,如果其中有布局颠簸,那么会给浏览器带来巨大负担。

解决办法

定义一个时间间隔,在此事件间隔期间,事件回调仅会被调用一次。这就是所谓的『反跳』。

例如定义了一个250毫秒的反跳间隔,而用户滚动页面时间为1000毫秒,这时候,事件回调仅仅会触发四次。

  • undersocre的 debounce 函数就是这个作用
  • flexible中是用的定时器:

    win.addEventListener('resize', function() {    clearTimeout(tid);    tid = setTimeout(refreshRem, 300);}, false);
    登入後複製

    减少图片渲染

    图片的形式:

    1. gradient
    2. box-shadow / text-shadow

    视频、图片是多媒体元素类型,浏览器必须要加倍渲染才行。多媒体元素中包含上千万的像素数据,要改变它们的大小、尺寸或重新合成对浏览器计算开销很大。

    另外,滚动页面几乎可以视为设置整个页面的动画(可以把滚动页面视为设置页面的top属性的动画),在移动设备中,多媒体元素会造成滚动性能的巨幅下降。

    解决办法

    尽可能少地加载图片

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1669
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
HTML:結構,CSS:樣式,JavaScript:行為 HTML:結構,CSS:樣式,JavaScript:行為 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web開發中的作用分別是:1.HTML定義網頁結構,2.CSS控製網頁樣式,3.JavaScript添加動態行為。它們共同構建了現代網站的框架、美觀和交互性。

HTML,CSS和JavaScript的未來:網絡開發趨勢 HTML,CSS和JavaScript的未來:網絡開發趨勢 Apr 19, 2025 am 12:02 AM

HTML的未來趨勢是語義化和Web組件,CSS的未來趨勢是CSS-in-JS和CSSHoudini,JavaScript的未來趨勢是WebAssembly和Serverless。 1.HTML的語義化提高可訪問性和SEO效果,Web組件提升開發效率但需注意瀏覽器兼容性。 2.CSS-in-JS增強樣式管理靈活性但可能增大文件體積,CSSHoudini允許直接操作CSS渲染。 3.WebAssembly優化瀏覽器應用性能但學習曲線陡,Serverless簡化開發但需優化冷啟動問題。

HTML的未來:網絡設計的發展和趨勢 HTML的未來:網絡設計的發展和趨勢 Apr 17, 2025 am 12:12 AM

HTML的未來充滿了無限可能。 1)新功能和標準將包括更多的語義化標籤和WebComponents的普及。 2)網頁設計趨勢將繼續向響應式和無障礙設計發展。 3)性能優化將通過響應式圖片加載和延遲加載技術提升用戶體驗。

HTML:建立網頁的結構 HTML:建立網頁的結構 Apr 14, 2025 am 12:14 AM

HTML是構建網頁結構的基石。 1.HTML定義內容結構和語義,使用、、等標籤。 2.提供語義化標記,如、、等,提升SEO效果。 3.通過標籤實現用戶交互,需注意表單驗證。 4.使用、等高級元素結合JavaScript實現動態效果。 5.常見錯誤包括標籤未閉合和屬性值未加引號,需使用驗證工具。 6.優化策略包括減少HTTP請求、壓縮HTML、使用語義化標籤等。

HTML與CSS vs. JavaScript:比較概述 HTML與CSS vs. JavaScript:比較概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在網頁開發中的角色分別是:HTML負責內容結構,CSS負責樣式,JavaScript負責動態行為。 1.HTML通過標籤定義網頁結構和內容,確保語義化。 2.CSS通過選擇器和屬性控製網頁樣式,使其美觀易讀。 3.JavaScript通過腳本控製網頁行為,實現動態和交互功能。

HTML與CSS和JavaScript:比較Web技術 HTML與CSS和JavaScript:比較Web技術 Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是構建現代網頁的核心技術:1.HTML定義網頁結構,2.CSS負責網頁外觀,3.JavaScript提供網頁動態和交互性,它們共同作用,打造出用戶體驗良好的網站。

HTML:是編程語言還是其他? HTML:是編程語言還是其他? Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增強WebevebDevelopment。

&lt; strong&gt;,lt; b&gt;有什麼區別標籤和lt; em&gt;,&lt; i&gt;標籤? &lt; strong&gt;,lt; b&gt;有什麼區別標籤和lt; em&gt;,&lt; i&gt;標籤? Apr 28, 2025 pm 05:42 PM

本文討論了HTML標籤,和和關注其語義與表現用途及其對SEO和可訪問性的影響之間的差異。

See all articles