ホームページ > 記事 > ウェブフロントエンド > Javascript は DOMContentLoaded イベントのインスタンス_JavaScript スキルをカプセル化します
私は最近 Javascript フレームワークを作成しており、DOMContentLoaded イベントをカプセル化したところです。少し興奮して、開発プロセス中に発生した原則と互換性の問題についてメモを取りました。それをあらゆる場所で探すことを忘れないようにしてください。 。
JS コードを記述するときは、通常、window.onload イベントを追加します。これは主に、DOM がロードされた後、getElementById、getElementsByTagName、およびその他のメソッドを使用して操作対象の DOM 要素を選択できるようにするためですが、window.load は待機するまで待機します。 DOM がロードされると、最終画像または iframe がロードされるまで、スクリプト、CSS、およびすべてのリソースがトリガーされません。多くの場合、Web ページには大量の大きな画像が含まれており、js を実行するには明らかに遅すぎます。最後の画像が読み込まれるまでは時間がかかり、多くの場合、手遅れになってしまいます。
多くの js フレームワークには、JQuery の $(document).ready() メソッドなどの document.ready 関数があり、DOM がロードされた直後に js コードを実行し、画像をゆっくりとロードできます。
document.ready のコアは DOMContentLoaded イベントです。Firefox、chrome、opera、safari、ie9 はすべてイベント バインディングに addEventListener('DOMContentLoaded',fn,false) を使用できますが、ie6 ~ 8 は DOMContentLoaded をサポートしていません。イベントが発生するため、ie6~8の互換処理が必要です。
情報によると、ie6~8 は document.onreadystatechange イベントを使用して document.readyState ステータスが complete に等しいかどうかを監視し、ページに iframe が埋め込まれているかどうかを判断できます。 ie6~8のdocument.readyStateはiframeが完了するまで待機します。このとき、iframeは時間がかかるものになります。しかし、テスト後、ページに iframe がなくても、readyState が complete に等しい場合、DOMContentLoaded イベントの代わりに onload イベントが実際にトリガーされることに驚きました。
幸いなことに、IE には独自の doScroll メソッドがあり、ページ DOM がロードされていない場合、doScroll メソッドが呼び出されたときにエラーが報告されます。それとは逆に、エラーが報告されなくなるまで doScroll が呼び出されるまでです。 、これはページ DOM がロードされたことを意味します。このメソッドは、画像と iframe のコンテンツがロードされているかどうかに関係なく有効です。
document.ready イベントに複数の js ファイルがバインドされている場合、ブラウザが繰り返しバインドするのを防ぎ、それらを順序立てて実行するために、イベント キュー メカニズムを導入して問題を解決できます。
上記は document.ready イベントの原理と互換性の問題です。 以下は、実行処理を理解しやすくするために、関数のカプセル化モードを使用しています。何か問題があります。アドバイスを歓迎します。