ホームページ ウェブフロントエンド H5 チュートリアル シンプルな画像プリロード コンポーネントを使用して、HTML5 モバイル ページのユーザー エクスペリエンスを向上させる _html5 チュートリアルのスキル

シンプルな画像プリロード コンポーネントを使用して、HTML5 モバイル ページのユーザー エクスペリエンスを向上させる _html5 チュートリアルのスキル

May 16, 2016 pm 03:51 PM
h5 コンポーネント

h5 モバイル ページで作業しているときに、ページは開いているのに内部の画像が読み込まれていないという状況に遭遇したことがあると思います。この問題はページの機能には影響しませんが、助かるわけではありません。ユーザーエクスペリエンスに。ネットワーク速度に関係なく、この問題を解決するには多くの方法があります。最も基本的な方法は、http リクエストのマージ、キャッシュ管理、画像圧縮などの側面からパフォーマンスを最適化することです。もう 1 つは、使用されるすべての画像を前処理することです。ページの読み込みプロセスでは、ユーザーがページを開いたときに最初の画面が表示されず、最初にリソース読み込みエフェクトが表示され、読み込みが完了した後にページのメインコンテンツが表示されます。問題を解決できます。この読み込み効果はユーザーの閲覧時間を消費しますが、それをより美しく、興味深いものにすることができるため、ユーザー エクスペリエンスには影響しません。この記事では、このアイデアを実装し、非常にシンプルな画像プリロード コンポーネントを提供します。実装は簡単で、機能も貧弱ではありません。モバイル ページを作成する際に参考になるはずです。
効果:

1. 実装アイデア

HTML の img タグと CSS の background-imag は、ブラウザに関連する画像をロードするようにトリガーします。ただし、画像がすでにロードされている場合、ブラウザはロードされた画像を直接使用するため、画像をレンダリングできます。瞬時にページを表示します。 JavaScript を使用して Image オブジェクトを作成し、これらのオブジェクトの src 属性をロードする画像のアドレスに設定します。これにより、ブラウザが画像をロードするようにトリガーすることもできます。これを使用して、画像のプリロード機能を実現します。最初に使用します。ページに関連する要素は、画像の要素を非表示にしてから、js を使用して画像を読み込み、すべての画像が読み込まれるまで待ってから、非表示の要素を表示します。ただし、これは単なる基本的な実装のアイデアであり、より堅牢な機能を備えたプリロード コンポーネントを完成させるには、まだ 3 つの問題があります:
1) 進捗の問題
プリロードは同時に行われるため、プリロード コンポーネントは次のことを行う必要があります。その結果、読み込みの進行状況を外部コンテキストにリアルタイムで通知する必要があります。進行状況を実装するには 2 つの方法があります。1 つはロードされたデータ サイズ/合計データ サイズであり、2 つ目はロードされたファイル数/合計ファイル数です。最初の方法を使用するのは現実的ではありません。はネイティブな方法ではないため、2 番目の方法のみを使用できます。
2) 画像の読み込み失敗の問題
例えば、画像が 4 つある場合、そのうちの 50% が読み込まれ、3 番目の画像の読み込み時にエラーが発生し、進捗が 75% にフィードバックされるべきです。 ?答えは「はい」です。これを行わないと、進行状況が 100% に達することはなく、ページのメイン コンテンツが表示されなくなります。画像の読み込みが失敗する可能性がありますが、画像自体は失敗する可能性があります。存在しないのですか?これは、イメージの読み込みの失敗がローダーの機能に影響を与えないことを意味します。
3) 画像読み込みタイムアウトの問題
画像を長時間読み込むことができません。そうしないと、ユーザーは読み込み中のままになり、メインコンテンツが表示されなくなり、ユーザーの待ち時間が制御不能に延長されます。これは、ローダーの本来の意図に反します。したがって、すべての画像のタイムアウト後に読み込みが完了しない場合は、読み込みタイムアウトを画像ごとに設定する必要があり、読み込みは積極的に中止され、読み込みが完了したことが外部コンテキストに通知され、メイン コンテンツが更新される必要があります。表示されます。
上記の要件に基づいて、この記事で提供される実装は次のとおりです。

JavaScript コードコンテンツをクリップボードにコピーします
  1. (関数 () {
  2. 関数 isArray(obj) {
  3. return Object.prototype.toString.call(obj) === '[オブジェクト配列]' ;    
  4. }
  5. /**
  6. * @param imgList ロードする画像アドレスのリスト、['aa/asd.png','aa/xxx.png']
  7. * @param callback 各画像が正常にロードされた後のコールバック。進行状況を示すために「ロードされた画像の合計数/ロードされる画像の合計数」が渡されます。
  8. * @param timeout 各画像のロードのタイムアウト、デフォルトは 5 秒です
  9. */
  10. varローダー= 関数(imgList, コールバック, タイムアウト) {
  11. タイムアウト = タイムアウト || 5000;    
  12. imgList = isArray(imgList) && imgList || [];    
  13. callback = typeof(callback) === 'function' && callback;    
  14. var total = imgList.length,
  15. ロード済み = 0,
  16. 画像 = [],
  17. _on = 関数 () {
  18. 読み込み済み < total && ( ロード済み, コールバック && コールバック(ロード済み / 合計));    
  19. };    
  20. if (!total) {
  21. return コールバック && コールバック(1);    
  22. }
  23. for (var i = 0; i < total; i ) {
  24. 画像[i] = 新しい Image();    
  25. imgages[i].onload = images[i].onerror = _on;    
  26. imgages[i].src = imgList[i];    
  27. }
  28. /**
  29. * タイムアウト * 合計時間範囲内に取り込まれていない静止画がある場合 (判定条件が読み込まれている < 合計) 場合、すべての写真を取り込んだことを外部環境に通知します
  30. * ユーザーが長時間待たされるのを避けることが目的です
  31. */
  32. setTimeout(関数 () {
  33. 読み込み済み < total && (loaded = total, callback && callback(loaded / total));    
  34. }、タイムアウト* 合計);    
  35. };
  36. "関数" === typeof 定義 && 定義.cmd ? >関数 () {
  37. リターン ローダー
  38. }) : window.imgLoader = ローダー;
  39. })();
  40. 使用法 (コード内の test.html に相当):
XML/HTML コード

コンテンツをクリップボードにコピー

<
スクリプト
  1. src="../js/ imgLoader.js">スクリプト> <
  2. スクリプト
  3. > imgLoader(['../img/page1.jpg', '../img/page2.jpg', '../img/page3.jpg'], function(percentage){
  4. console.log(パーセンテージ)
  5. });
  6. スクリプト
  7. > 実行結果:


2. デモの説明

この記事の冒頭で示した効果、対応するページはindex.htmlです。必要な問題が 2 つあります。この効果について説明します:
1) 以前のブログで紹介したスライディング スクリーンのアイデア Hammer.js カルーセルの原理を使用して、単純なスライディング スクリーン関数 を実装し、そのロジックの一部をスワイプでラップします。 js では、グローバル変数 Swipe を外部に提供しています。このモジュールには、Swipe.init() を呼び出すことで外部からスライディング スクリーン関連の関数を初期化できるようにするための init メソッドが用意されています。 js がロードされた後に初期化されます。この init メソッドを使用すると、ロードが完了するまでスライディング スクリーン ロジックを遅延させて初期化することができます。 index.html は合計 5 つの js を参照します:

XML/HTML コードコンテンツをクリップボードにコピー

  1. <script src="js/zepto.js ">スクリプト>
  2. <script src="js/ transition.js">スクリプト>
  3. <script src="js/ Hammer.js">スクリプト>
  4. <script src="js/ imgLoader.js">スクリプト>
  5. <script src="js/ swipe.js">スクリプト>

そのうちの imgLoader.js は前の中間画像追加プログラムであり、前の 3 つの js は最後の swipe.js サービスです。スライディング機能は関連する内容を理解しています。スライディング スクリーンはここでは重要ではありませんが、swipe.js がここでの内容の理解に影響を与えることはありません ~
2) デモでは 3 倍の大きな画像を使用しましたが、この環境では、追加速度も非常に速いため、最初の時点では、事前に追加された効果が見られ、最終的には、すべての回を繰り返す前に次の延長を行うだけで、最初のgif画像を最初から見ることができます読み込み効果、実行方法:

XML/HTML コード复制コンテンツ到剪贴板
  1. //模拟加ダウンロード遅い效果
  2. var コールバック = [];    
  3. imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {
  4. var i = コールバック.length;    
  5. callbacks.push(function(){
  6. setTimeout(function(){
  7. var percentT = パーセント * 100;    
  8. $('#loader__info').html('Loading ' (parseInt(percentT)) '%');    
  9. $('#loader__progress')[0].style.width = percentT '%';    
  10. if (パーセンテージ == 1) {
  11. setTimeout(function(){
  12. $('#loader').remove();    
  13. Swipe.init();    
  14. }、600);    
  15. }
  16. コールバック[i 1] && コールバック[i 1]();    
  17. },600);    
  18. });    
  19. if(パーセンテージ == 1) {
  20. コールバック[0]();    
  21. }
  22. });   

真の環境では、最も良いのは不要な刻意を取り除くこのような延長、不要な追加ダウンロード効果、就浪费它不必要な待機時間、したがって真の環境はこのための次の代金コードです:

XML/HTML コード复制コンテンツ到剪贴板
  1. imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {
  2. var percentT = パーセント * 100;    
  3. $('#loader__info').html('Loading ' (parseInt(percentT)) '%');    
  4. $('#loader__progress')[0].style.width = percentT '%';    
  5. if (パーセンテージ == 1) {
  6. $('#loader').remove();    
  7. Swipe.init();    
  8. }
  9. });   

3. 注意事項
プリロードは比較的一般的な実装効果ですが、使用する際には注意が必要ないくつかの問題があります。
1 ) ページが大きい場合の使用
一般に、ページ サイズが 3M を超える場合に使用を検討する必要があります。携帯電話のテスト時に使用を検討できます。読み込みが遅いことが明らかにわかります。
2) スプライト画像を使用してみてください。
3) ローディングエフェクトを実装するときは、画像を使用しないようにしてください。画像を使用したい場合でも、非常に小さな画像を使用する必要があります。そうしないと、ローディングエフェクトがそこに留まってしまいます。そしてそれは無意味になります。
4. 概要
この記事では主に、h5 モバイル ページの開発に適用できる簡単な画像プリローダーを紹介します。また、これを変更して、オーディオ ファイルやビデオ ファイルなどの他の種類のリソースを読み込むために使用することもできます。結局のところ、これらの種類の DOM オブジェクトは、Image オブジェクトと同様のプロパティとコールバックも提供します。プリロード方式とは逆に、画像を遅延ロードする技術もあります。インターネット上にはすでに比較的使いやすい jquery プラグインがありますが、その考え方や実装のポイントについてはさらに学ぶ価値があります。時間があるときに調べてください。同時に、スクリプト ハウス Web サイトを引き続きサポートしていただきありがとうございます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Dec 28, 2023 pm 03:43 PM

win10で一部のゲームをプレイすると、画面がフリーズしたり画面がぼやけるなどの不具合が多くのユーザーに発生しますが、現時点ではダイレクトプレイ機能をオンにすることで問題を解決でき、機能の操作方法も非常に簡単です。 win10 の古いコンポーネントである Directplay をインストールする方法 1. 検索ボックスに「コントロール パネル」と入力して開きます 2. 表示方法として大きなアイコンを選択します 3. 「プログラムと機能」を見つけます 4. 左側をクリックして有効にするか、 Win 機能をオフにする 5. ここで古いバージョンを選択します チェックボックスをオンにするだけです

VUE3 開発の基本: extend を使用してコンポーネントを継承する VUE3 開発の基本: extend を使用してコンポーネントを継承する Jun 16, 2023 am 08:58 AM

Vue は現在最も人気のあるフロントエンド フレームワークの 1 つであり、VUE3 は Vue フレームワークの最新バージョンであり、VUE2 と比較してパフォーマンスが高く、開発エクスペリエンスが優れているため、多くの開発者の最初の選択肢となっています。 VUE3 では extends を使ってコンポーネントを継承することが非常に実用的な開発手法となっておりますので、この記事では extends を使ってコンポーネントを継承する方法を紹介します。エクステンドとは何ですか? Vue では、extends は非常に実用的な属性であり、子コンポーネントが親から継承するために使用できます。

Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Jun 25, 2023 pm 01:28 PM

Vue は非常に人気のあるフロントエンド フレームワークであり、コンポーネント化、データ バインディング、イベント処理など、開発者が効率的で柔軟で保守が容易な Web アプリケーションを構築するのに役立つ多くのツールと機能を提供します。この記事では、Vueを使ってカレンダーコンポーネントを実装する方法を紹介します。 1. 要件の分析 まず、このカレンダー コンポーネントの要件を分析する必要があります。基本的なカレンダーには次の機能が必要です: 当月のカレンダー ページの表示、前月または翌月への切り替えのサポート、特定の日のクリックのサポート、

Vue が JSX を通じてコン​​ポーネントを動的にレンダリングする方法について話しましょう Vue が JSX を通じてコン​​ポーネントを動的にレンダリングする方法について話しましょう Dec 05, 2022 pm 06:52 PM

Vue はどのようにして JSX を通じてコン​​ポーネントを動的にレンダリングしますか?次の記事では、Vue が JSX を通じてコン​​ポーネントを効率的に動的にレンダリングする方法を紹介します。

h5 とはどういう意味ですか? h5 とはどういう意味ですか? Aug 02, 2023 pm 01:52 PM

H5 は、HTML の最新バージョンである HTML5 を指します。H5 は、開発者により多くの選択肢と創造的なスペースを提供する強力なマークアップ言語です。その出現は、Web テクノロジーの発展を促進し、Web ページのインタラクションと効果をより優れたものにします。H5 テクノロジーとして徐々に成熟して普及していき、インターネットの世界でますます重要な役割を果たしていくと思います。

Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Mar 15, 2024 pm 04:51 PM

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

古いバージョンのwin10コンポーネントの設定を開く方法 古いバージョンのwin10コンポーネントの設定を開く方法 Dec 22, 2023 am 08:45 AM

Win10 の古いバージョンのコンポーネントは、デフォルトで閉じられていることが多いため、ユーザー自身が設定で有効にする必要があります。まず、設定を入力する必要があります。操作は非常に簡単です。以下の手順に従ってください。Win10 の古いバージョンはどこにありますか?バージョン コンポーネント? 開く 1. [スタート] をクリックし、[Win システム] をクリックします 2. クリックしてコントロール パネルに入ります 3. 次に、下のプログラムをクリックします 4. [Win 機能を有効または無効にする] をクリックします 5. ここで必要なものを選択できます開く

VSCode プラグイン共有: Vue/React コンポーネントのリアルタイム プレビュー用プラグイン VSCode プラグイン共有: Vue/React コンポーネントのリアルタイム プレビュー用プラグイン Mar 17, 2022 pm 08:07 PM

VSCode で Vue/React コンポーネントを開発する場合、コンポーネントをリアルタイムでプレビューするにはどうすればよいですか?この記事では、VSCode で Vue/React コンポーネントをリアルタイムにプレビューするためのプラグインを紹介します。

See all articles