目次
第 1 章 JavaScript アニメーションと CSS アニメーション
JS アニメーションのパフォーマンスは問題ではありません
JSアニメーションのユニークな機能
第 2 章 Velocity.js を使用してアニメーションを実装する
第3章 モーションデザイン理論
第 4 章 アニメーション ワークフロー
CSS アニメーション ワークフロー
CSS の問題
いつ CSS を使用するか
コーディングのヒント: スタイルをロジックから分離する
一般的なアプローチ
最適化の実践
コーディングのヒント: アニメーションの並べ替えを整理する
コーディング スキル: パッケージング エフェクト
第 5 章 テキスト アニメーション
第 6 章 SVG 入門
第 7 章 アニメーションのパフォーマンス
レイアウト バンプ
解决办法
避免影响临近的元素
优先考虑 opacity胜于 color
不用持续响应scroll和resize事件
减少图片渲染
ホームページ ウェブフロントエンド htmlチュートリアル 「JavaScript Webアニメーションデザイン」読書メモ_html/css_WEB-ITnose

「JavaScript Webアニメーションデザイン」読書メモ_html/css_WEB-ITnose

Jun 24, 2016 am 11:27 AM

ここ 2 日間で「JavaScript Web アニメーション デザイン」を読み始めました。要約は次のとおりです。以前このライブラリを使用したことがありますが、非常に便利でスムーズです。ただし、第 4 章のアニメーション ワークフローと第 7 章のアニメーション パフォーマンスを除いて、すべて Velocity ライブラリを紹介しています。おそらく、「Velocity アニメーション デザイン」と呼ぶのが適切でしょう。

ここに記録しておき、久しぶりに「Webアニメ」の話題をまとめていきます。

第 1 章 JavaScript アニメーションと CSS アニメーション

JS アニメーションのパフォーマンスは問題ではありません

  • ホバー状態に適した CSS アニメーション
  • JS アニメーションは CSS アニメーションと同じくらい高速です
  • JS と jQuery を混同しないでください
  • 速度。js

JSアニメーションのユニークな機能

  • ページスクロール: ページが特定の要素までスクロールします
  • アニメーション反転: アニメーション形式の要素が前のアニメーションが開始される前の値に戻ります
  • 物理的なモーション効果: 摩擦

第 2 章 Velocity.js を使用してアニメーションを実装する

アニメーションの種類:

  • CSS アニメーション: トランジション / アニメーション
  • JS アニメーション: GSAP、Velocity.js
  • キャンバス アニメーション: Fabric.js
  • SVGアニメーション: Snap.js、SVG.js
  • WebGLアニメーション: Three.js

詳細はこちら

イージング方程式

第3章 モーションデザイン理論

この章は理論の話ですよね。間違った本を購入しましたか?

第 4 章 アニメーション ワークフロー

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}
ログイン後にコピー

不透明度のアニメーションの継続時間を 1 秒増やし、他の属性のアニメーションの継続時間を変更しない場合は、パーセンテージを調整できるように再計算する必要があります。どこでも属性値は 1 秒ずつ増分された期間と一致します。

いつ CSS を使用するか

ユーザーが要素上にマウスを置くと簡単なスタイルの変更がトリガーされ、トランジションを使用します

コーディングのヒント: スタイルをロジックから分離する

一般的なアプローチ

jQuery には、主に 2 種類のアニメーションがあります メソッド:

  • スタイルを切り替えるには 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 アニメーションのワークフローを最適化できる 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")
ログイン後にコピー

第 5 章 テキスト アニメーション

テキスト アニメーションは Web ページではほとんど使用されません。テキスト アニメーションの退屈な側面を回避し、効率的なワークフローを提供するのに役立つツールをいくつか紹介します。

Blast.js

Blast はページ上のテキストを分割できます

Velocity.js および Velocity-ui と組み合わせる

第 6 章 SVG 入門

Snap.svg

SVG アニメーション、本来は画像を使用する必要があります次の用途に使用します。

  • ユーザーがマウスをホバーまたはクリックしたときにトリガーされる複雑なアニメーション シーケンスを持つボタン
  • 古い GIF を置き換えるために使用できるユニークな読み込みステータス グラフィック
  • 会社のロゴ、ページ 読み込み時に、ロゴは一緒にアニメーション化できます

第 7 章 アニメーションのパフォーマンス

レイアウト バンプ

要素の CSS プロパティの設定 (set) とクエリ (get) は、パフォーマンスのオーバーヘッドを引き起こす 2 つのコア ブラウザです プロセッサ プロセス (およびグラフィックス レンダリング) 。

要素に新しい属性を設定した後、ブラウザは変更によるその後の影響を計算する必要があります。たとえば、要素の幅を変更すると連鎖反応が発生し、その親要素、兄弟要素、子要素の幅もそれぞれの CSS プロパティに従って調整されます。

スタイルの設定と取得を交互に行うことによって引き起こされる UI のパフォーマンスの低下は、レイアウト スラッシング と呼ばれます。

ブラウザはページ レイアウトの再計算のために高度に最適化されていますが、レイアウトの乱れにより、最適化の効果は大幅に減少します。

たとえば、ブラウザーは最初のフェッチ後のページの状態をキャッシュし、後続の各フェッチ操作でその状態を参照できるため、ブラウザーはすでに同時フェッチ操作を 1 つのスムーズな操作に最適化できます。ただし、get と set を繰り返し実行すると、設定を変更するとキャッシュが継続的に無効になるため、ブラウザーに多くの重労働を要求することになります。

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

解决办法

把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 搭載アプリ

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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? 公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? Mar 04, 2025 pm 12:32 PM

公式アカウントのWebページはキャッシュを更新します。これはシンプルでシンプルで、ポットを飲むのに十分な複雑です。あなたは公式のアカウントの記事を更新するために一生懸命働きましたが、ユーザーはまだ古いバージョンを開くことができますか?この記事では、この背後にあるtwist余曲折と、この問題を優雅に解決する方法を見てみましょう。それを読んだ後、さまざまなキャッシュの問題に簡単に対処でき、ユーザーが常に新鮮なコンテンツを体験できるようになります。最初に基本について話しましょう。それを率直に言うと、アクセス速度を向上させるために、ブラウザまたはサーバーはいくつかの静的リソース(写真、CSS、JSなど)やページコンテンツを保存します。次回アクセスするときは、もう一度ダウンロードすることなく、キャッシュから直接検索できます。自然に高速です。しかし、このことは両刃の剣でもあります。新しいバージョンはオンラインです、

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

WebページのPNG画像にストローク効果を効率的に追加する方法は? WebページのPNG画像にストローク効果を効率的に追加する方法は? Mar 04, 2025 pm 02:39 PM

この記事では、CSSを使用したWebページへの効率的なPNG境界追加を示しています。 CSSはJavaScriptやライブラリと比較して優れたパフォーマンスを提供し、微妙または顕著な効果のために境界幅、スタイル、色を調整する方法を詳述していると主張しています

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

< datalist>の目的は何ですか 要素? < datalist>の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

< meter>の目的は何ですか 要素? < meter>の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5< time>について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

< Progress>の目的は何ですか 要素? < Progress>の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

See all articles