HTMLコードに基づく画像断片化読み込み機能の実装

HTMLコードに基づく画像断片化読み込み機能の実装

今日は断片化された画像の読み込み効果を実装します。効果は次のとおりです。

これを 3 つのステップで実装します。

  • HTML構造を定義する
  • 画像を分割
  • アニメーション関数の記述

HTML構造を定義する

ここで必要なのはキャンバス要素だけです。

<html>
  <本文>
    <キャンバス
      id="myCanvas"
      幅="900"
      高さ="600"
      スタイル="背景色: 黒;"
    </キャンバス>
  </本文>
</html>

画像を分割

この例では、10 行 10 列のグリッドに従って画像を 100 個の小さなフラグメントに分割し、各小さなフラグメントを個別にレンダリングできるようにします。

image = new Image();
イメージをアップロードする
boxWidth、boxHeightを設定します。
// 10行10列に分割する let rows = 10,
  列数 = 20,
  カウンター = 0;

image.onload = 関数(){
  // 各行と列の幅と高さを計算します。boxWidth = image.width / columns;
  boxHeight = image.height / 行数;
  // ループレンダリング requestAnimationFrame(animate);
};

requestAnimationFrame: アニメーションを実行することをブラウザに伝え、次の再描画の前に指定されたコールバック関数を呼び出してアニメーションを更新するようにブラウザに要求します。

アニメーション関数の記述

次に、再描画の前にブラウザが小さなフラグメントをランダムにレンダリングできるようにするアニメーション関数を記述します。

ここでの核となるのは context.drawImage メソッドです。

キャンバスを document.getElementById("myCanvas"); にします。
コンテキストを canvas.getContext("2d");

関数アニメーション() {
  // モジュールをランダムにレンダリングします。let x = Math.floor(Math.random() * columns);
  y = Math.floor(Math.random() * 行) とします。
  // コア context.drawImage(
    画像、
    x * boxWidth, // キャンバスの水平座標の開始位置 y * boxHeight, // キャンバスの垂直座標の開始位置 boxWidth, // 描画の幅(小さなフラグメント画像の幅)
    boxHeight, // 描画の高さ(小さなフラグメント画像の高さ)
    x * boxWidth, // 大きな画像の x 座標位置から描画を開始します。 y * boxHeight, // 大きな画像の y 座標位置から描画を開始します。 boxWidth, // 大きな画像の x 位置 (小さなフラグメント画像の幅) から描画を開始します。
    boxHeight // 大きな画像の y 位置から始めて、描画する高さ (小さなフラグメント画像の高さ)
  );
  カウンター++;
  // モジュールが 90% レンダリングされている場合は、画像全体を表示します。
  if (カウンター > 列 * 行 * 0.9) {
    context.drawImage(画像, 0, 0);
  } それ以外 {
    アニメーションフレームをリクエストします(アニメーション化)。
  }
}

完全なコード

<html>
  <本文>
    <キャンバス
      id="myCanvas"
      幅="900"
      高さ= "600"
      スタイル="背景色: 黒;"
    </キャンバス>
    <スクリプト>
      image = new Image();
      画像.src = "https://cdn.yinhengli.com/canvas-example.jpeg";
      キャンバスを document.getElementById("myCanvas"); にします。
      コンテキストを canvas.getContext("2d");
      boxWidth、boxHeightを設定します。
      行数を10とします。
        列数 = 20,
        カウンター = 0;

      image.onload = 関数(){
        boxWidth = image.width / 列数;
        boxHeight = image.height / 行数;
        アニメーションフレームをリクエストします(アニメーション化)。
      };

      関数アニメーション() {
        x = Math.floor(Math.random() * columns); とします。
        y = Math.floor(Math.random() * 行) とします。
        コンテキスト.drawImage()
          画像、
          x * boxWidth, // 水平座標の開始位置 y * boxHeight, // 垂直座標の開始位置 boxWidth, // 画像の幅 boxHeight, // 画像の高さ x * boxWidth, // キャンバス上の画像の x 座標位置を配置します y * boxHeight, // キャンバス上の画像の y 座標位置を配置します boxWidth, // 使用する画像の幅 boxHeight // 使用する画像の高さ);
        カウンター++;
        if (カウンター > 列 * 行 * 0.9) {
          context.drawImage(画像, 0, 0);
        } それ以外 {
          アニメーションフレームをリクエストします(アニメーション化します);
        }
      }
    </スクリプト>
  </本文>
</html>

要約する

このデモでは、canvasAPI を使用して画像のフラグメント読み込み効果を実現します。とても簡単ですよね?

これで、HTML コードに基づく画像断片化読み込み機能の実装に関するこの記事は終了です。より関連性の高い HTML 画像断片化読み込みコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Vueのキーボードイベントの詳細な説明

>>:  フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

推薦する

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

デザイナーが再びハマーの公式サイトに不満を述べる

昨年、この公開書簡は大ヒットし、羅永浩氏を驚かせた。今日、著者が新しい章を発表するとは思ってもみなか...

HTMLページの読み込み速度を上げる方法

(1)HTTPリクエストを減らす。 (リソース ファイルをマージし、イメージ スプライトを使用します...

ES6 ループと反復可能オブジェクトの例

この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...

HTML メタビューポート属性の説明

ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置し...

画像プレビュー付きのアップロードフォームの完全な HTML

画像プレビュー機能付きのアップロードフォーム、完全なHTMLコードは次のとおりです。 <htm...

IISMonitor を使用して Web ページを監視し、IIS を自動的に再起動します。

目次1. ツールの紹介2. ワークフロー3. 操作インターフェースとパラメータ設定(1)監視と再起動...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

VPS はオフライン ダウンロード サーバーを構築します (ネットワーク ディスクの時代以降)

モチベーション学習の必要性から、海外のサーバーメーカー(どこのメーカーかは言いません)のVPSサービ...

両端の CSS レイアウトのサンプルコード (親の負のマージンを使用)

最近、開発中に両端が揃ったレイアウトに遭遇しました。レイアウトはパーセンテージに基づいていました。以...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

CSS フィルターを使用してマウスオーバー効果を記述する例

CSSフィルターを使用してマウスオーバー効果を記述する <div class="fi...

MySQL の innodb_flush_log_at_trx_commit と sync_binlog を区別する方法

2 つのパラメータ innodb_flush_log_at_trx_commit と sync_bi...