模擬jQuery中的ready方法及實作按需載入css,js實例程式碼_jquery
常用jQuery類別庫或其他類別庫中的ready方法,有時候想想它們到底是怎麼實現的,但是看了一下jQuery中的源碼,牽涉到的模組比較多,(水平有限)程式碼比較難看懂;自己結合了一些書籍內容,總結一下。
先說一下ready函數的實現思路:
變數ready透過表達式賦值,右側為一個自執行匿名函數,在這個匿名函數中,首先為各個瀏覽器的事件綁定處理函數,並為isReady賦值(根據事件非同步處理程序來決定),然後回傳一個傳參閉包,在閉包中,主要判斷isReady值來執行操作,如果dom結構準備就緒(isReady === true),執行回調,否則將回呼加入到要執行的佇列(funs)中,待事件處理程序執行時,迴圈遍歷佇列(funs),並依序執行佇列中的函數,執行完佇列中的函數後,還需要清除佇列(funs = null)。
var ready = (function(>
var ready = (function(){var isReady = false,
funs = [];
function handle (e) {
}
if ( e.type === ' readystatechange' && (document.readyState !== 'interactive' && document.readyState !== 'complete') ) {
0; i funs[i].call(document);
} ull;
}
if ( document.addEventListener ) {
document.addEventListener( 'DOMContentLoaded', handle, false );
document.addEventListener( 'readystatechange', hand document.addEventListener( 'readystatechange', hand. EventListener( 'load', handle, false );
}
else if ( document.attachEvent ) {
document.attachEvent( 'onreadystatechange', handle . }
return function ready (callback) {
if ( isReady ) {
, 🎜> funs.push(callback);
}
};
}());
PS:
此函數程式碼參考於權威指南書籍,唯一不同的是,多加了一個判斷document.readyState !== 'interactive'
複製程式碼
代碼如下:
if ( e.type === 'readystatechange' && document.readyState !== 'interactive' && document.readyState !== 'complete') ) {
return;
參考了jQuery來源碼,寫了一個type函數,傳回參數型別。
複製程式碼
程式碼如下:
/**
*
* 判斷參數類型
* createTime: 2013/9/18
*
*/
函數型別(obj) {
var classTypes, objectTypes;
;
}
classTypes = {};
objectTypes = ('布林數字字串函數陣列日期正規表示式物件錯誤').split(' ');
, len = objectTypes.length; i ) {
類型.[ '[object ' objectTypes[i] ']' ] = objectTypes[i].to = 'object' || typeof obj === 'function' ) {
var key = Object.prototype.toString.call(obj);
return classTypes[key];
}
return typeof obj;
}
function loadCss (cssUrl, callback) {
var elem, bl,
isExecuted = falsese> isExecuted = falsese > null ) {
return String(cssUrl);
}
elem = document.createElement '), ); allback) === 'function' ) {
bl = true;
}
// forie
| elem.readyState === '已載入' || elem.readyState === '完成' ) {
if (bl && !isExecuted) { }
elem.onreadystatechange = statechange = 句柄;
// 對於非ie
if (bl && !isExecuted) {
elem.onload = 回呼;
isExecuted = true;
} elem.Tagh_copermp. 0].appendChild( elem);
}
// js循環載入
function loadScript(scriptUrl, callback) {
var elem, bl,
isExecuted = false; (scriptUrl == null) {
return String(fn);
}
elem = document.createElement('script') bl = true;
}
// 對於ie
function hand if (status === '已載入' || status === '完成') {
isExecuted = true;
}
🎜> }
}
elem.onreadystatechange = 句柄;
em.onload = 回呼;
isExecuted = true;
}
elem.src = scriptUrl;
document.getElementsByTagName('head')[0].appendChild(elem);
PS: 在判斷link,script元素是否加載完畢,主要依靠load事件;而在ie9以下瀏覽器中,並沒有load事件,ie為它們都添加了一個readystatechange事件,通過判斷
元素的readyState狀態確定元素是否已經載入完畢;而奇怪的是,在ie9(還可能存在其他瀏覽器版本)中,元素既有load事件又有readystatechange事件,因此在程式碼中加入了一個變數isExecuted,如果執行過回調,那麼就不再執行,避免回調執行兩次。
三、調用方式
loadCss('http://www.jb51.net/apps/tbtx/miiee/css/base.css', function(){
console.log('css載入完成') ;
});
loadScript('http://www.jb51.net/apps/tbtx/miiee/js/jQuery.js', function(){
console.log('js載入完成');
});
ready(function(){
console.log('dom is ready!');
});

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

答案:可以使用 Bootstrap 的日期選擇器組件在頁面中查看日期。步驟:引入 Bootstrap 框架。在 HTML 中創建日期選擇器輸入框。 Bootstrap 將自動為選擇器添加樣式。使用 JavaScript 獲取選定的日期。

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

在 Bootstrap 中驗證日期,需遵循以下步驟:引入必需的腳本和样式;初始化日期選擇器組件;設置 data-bv-date 屬性以啟用驗證;配置驗證規則(如日期格式、錯誤消息等);集成 Bootstrap 驗證框架,並在表單提交時自動驗證日期輸入。

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。
