最近、JavaScriptを使ってアニメーション機能を作りたいと思っています。アニメーションをスムーズにスムーズに再生するために、使用する画像素材をプリロードする必要があります。この機能を実装するプロセスを共有します
単一イメージのプリロード
最も一般的な実装方法は次のとおりです
function preloadImg(url) { var img = new Image(); img.src = url; if(img.complete) { //接下来可以使用图片了 //do something here } else { img.onload = function() { //接下来可以使用图片了 //do something here }; } }
まず、Image オブジェクトをインスタンス化します。値を img に設定し、img.src をパラメータ url で指定された画像アドレスに設定し、img の完全な属性を決定します。この画像のローカル キャッシュがある場合、値は true になります。この時点で、このイメージを直接操作します。ローカル キャッシュがない場合、値は false です。このとき、img の onload イベントを監視し、img に対する操作を onload コールバック関数に入れる必要があります。テスト後のこの解決策は、基本的に次のとおりです現在のすべてのブラウザと互換性
複数の画像のプリロード
アニメーションなどの関数には通常、多くの機能が含まれるため、多くのシナリオでは、単一の画像のプリロードではニーズを満たすことができません。次に、元の単一画像のプリロードに基づいて機能を改善します
function preloadImg(list) { var imgs = arguments[1] || [], //用于存储预加载好的图片资源 fn = arguments.cal lee; if(list.length == 0) { return imgs; } var img = new Image(); img.src = list[0]; if(img.complete) { imgs.push(img); list.shift(); fn(list, imgs); } else { img.onload = function() { imgs.push(img); list.shift(); fn(list, imgs); }; } } var list = [......], //此处省略一万个字符 imgs = preloadImg();
フレーム アニメーションでは、アニメーションの各フレームで使用される画像の順序を保証する必要があるため、このコードでは再帰を使用しますこのメソッドでは、前のピクチャがロードされた後に次のピクチャをロードします。ピクチャがロードされるたびに、ピクチャ リソースが imgs 配列に格納され、このピクチャのアドレスがアドレス配列リストから削除されます。リスト内で、再帰から抜け出して imgs 配列を返します。
アイデアは美しいですが、現実は残酷です。このコードには耐えられない問題が 2 つあります。
まず第一に、私はおそらくそうでしょう。ローカルにキャッシュされていない画像がある限り、imgs の保存操作は onload コールバック イベントに配置され、イベント監視も JavaScript の非同期操作の一種であるため、最後に返された imgs 配列は取得できません。 onload イベントのバインディング コールバック関数の後、preloadImg 関数は戻り値なしで終了します 外部 imgs 変数が受け取る値は未定義です すべての画像がローカル キャッシュを持つ場合にのみ、外部 imgs 変数はすべてのプリロードされた画像を正常に取得できます画像リソースの配列
1 つの画像をロードしてから次の画像をロードすると、画像のプリロード プロセス全体に比較的長い時間がかかり、ユーザー エクスペリエンスが低下し、元の非同期操作が特殊になります。この実装方法は、onload 非同期機能を完全に放棄するのと同じです。
複数画像のプリロード (改良版)
今回は、空の配列を直接配置します。がパラメータとして関数に渡され、すべての画像がこの配列に格納されます。以下は改良された関数コードです (jQuery を使用できると仮定しています)
function preloadImg(list,imgs) { var def = $.Deferred(), len = list.length; $(list).each(function(i,e) { var img = new Image(); img.src = e; if(img.complete) { imgs[i] = img; len--; if(len == 0) { def.resolve(); } } else { img.onload = (function(j) { return function() { imgs[j] = img len--; if(len == 0) { def.resolve(); } }; })(i); img.onerror = function() { len--; console.log('fail to load image'); }; } }); return def.promise(); } var list = [......], //此处省略一万个字符 imgs = []; $.when(preloadImg(list, imgs)).done( function() { //预加载结束 //do something here } );
onload コールバック関数を各 img に個別にバインドする場合クロージャを使用する目的は、現在のインクリメント変数 i を保存することです。これが行われない場合、ローカルにキャッシュされていないリスト アドレス内の画像が imgs
## の最後の要素に保存されることになります。 # 今回は画像がロードされるたびに、リスト配列から画像のアドレスを削除しないので、後でリスト配列のデータを使用する必要があるときに、正常に取得できます。このコードでは、jQuery の Deferred オブジェクトを導入しました。これにより、画像をプリロードするプロセス全体を簡単に把握できるようになります。以上がjQuery が画像のプリロード関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

複数のリンクの同時ゲットリクエストを作成し、結果を返すために順番に判断する方法は? TamperMonkeyスクリプトでは、複数のチェーンを使用する必要があることがよくあります...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック



