JavaScript は JQuery の Ready メソッドの実装をシミュレートし、問題を引き起こす_JavaScript スキル

WBOY
リリース: 2016-05-16 18:40:12
オリジナル
1097 人が閲覧しました

dom がロードされた後、それが実行されます。インターネット上のいくつかのメソッドのロジックが理解できなかったので、「Jquery ソース コードの研究 (ready function)」の記事を読んでから書きました。以下のコードを自分で作成しました(詳細な説明が記載されています)

コードをコピー コードは次のとおりです:

org/1999 /xhtml">




>



jqと一緒にいたいから 比較のために、テスト中にjqライブラリをインポートする必要があります。関数自体はjqを呼び出していないので、自由に引用してください。

カプセル化を通じてコードを完成させたので、Darren.ready(fn) で直接実行できます。

テストに合格した後も、奇妙な問題が発生しました。FF での実行順序は jq -> my -> です。言い換えれば、私の関数は onload イベントが実行される前にトリガーできますが、jq の準備が完了するよりも遅くなります。これでも十分満足です。

ただし、IE でのテストは次のとおりです。 jq -> my。つまり、私の関数はコードを進めることができますが、依然として onload イベントの実行後にトリガーされるため、不可解です。

同志、onload の前に実行する方法と、jq がどのように実装されるかを説明してください。jq の構造を完全にシミュレートしましたが、途中でリークがまだ達成できません。

以下のコードも参照できます



コードをコピーします


コードは次のとおりです:

varready=function(readyCall) {
if(document.addEventListener)
document.addEventListener("DOMContentLoaded",function() {
document.removeEventListener("DOMContentLoaded",arguments) .callee,false);
readyCall()
},false);
else if(document.attachEvent) {//IE の場合
if(document.documentElement.doScroll && window.self==window.top) {
(function() {
try {
document.documentElement.doScroll("left");
}catch(ex) {
setTimeout(arguments.callee,5);
readyCall();
})();
}else {//遅いかもしれませんが、iframe の場合もあります。
document.attachEvent("onreadystatechange",function() {
if(document.readyState==="complete") {
ドキュメント。 detachEvent("onreadystatechange", argument.callee);
readyCall()
}
});
}
}
}

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート