찾다
웹 프론트엔드HTML 튜토리얼《JavaScript网页动画设计》读书笔记_html/css_WEB-ITnose

这两天开始看《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으로 문의하세요.
HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?Apr 15, 2025 am 12:13 AM

Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworksporstylingandjavaScriptOfforIncincivity, WebDevelopment 향상.

HTML : 웹 페이지 구조 구축HTML : 웹 페이지 구조 구축Apr 14, 2025 am 12:14 AM

HTML은 웹 페이지 구조를 구축하는 초석입니다. 1. HTML은 컨텐츠 구조와 의미론 및 사용 등을 정의합니다. 태그. 2. SEO 효과를 향상시키기 위해 시맨틱 마커 등을 제공합니다. 3. 태그를 통한 사용자 상호 작용을 실현하려면 형식 검증에주의를 기울이십시오. 4. 자바 스크립트와 결합하여 동적 효과를 달성하기 위해 고급 요소를 사용하십시오. 5. 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함되며 검증 도구가 필요합니다. 6. 최적화 전략에는 HTTP 요청 감소, HTML 압축, 시맨틱 태그 사용 등이 포함됩니다.

텍스트에서 웹 사이트로 : HTML의 힘텍스트에서 웹 사이트로 : HTML의 힘Apr 13, 2025 am 12:07 AM

HTML은 웹 페이지를 작성하는 데 사용되는 언어로, 태그 및 속성을 통해 웹 페이지 구조 및 컨텐츠를 정의합니다. 1) HTML과 같은 태그를 통해 문서 구조를 구성합니다. 2) 브라우저는 HTML을 구문 분석하여 DOM을 빌드하고 웹 페이지를 렌더링합니다. 3) 멀티미디어 기능을 향상시키는 HTML5의 새로운 기능. 4) 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함됩니다. 5) 최적화 제안에는 시맨틱 태그 사용 및 파일 크기 감소가 포함됩니다.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

HTML 및 코드 : 용어를 자세히 살펴 봅니다HTML 및 코드 : 용어를 자세히 살펴 봅니다Apr 10, 2025 am 09:28 AM

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구Apr 09, 2025 am 12:12 AM

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

HTML, CSS 및 JavaScript의 역할 : 핵심 책임HTML, CSS 및 JavaScript의 역할 : 핵심 책임Apr 08, 2025 pm 07:05 PM

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구