寫個js/css動態載入的JavaScript外掛
由於現在手上專案沒用到jQuery,以及希望能動態載入js/css
所以就寫了動態載入的指令碼
原理簡介:
通過給定的url引數中js/css檔案的字尾動態外掛節點
通過引數繫結新增到的父級節點
繫結節點載入onload 和 onerror事件執行檔案載入成功或失敗事件
1.JavaScript建立節點新增到body或head
新增js的程式碼:
var n = document.createElement("script");
n.setAttribute("type", "text/javascript");
n.setAttribute("src", i);
document.body.appendChild(n);
document.head.appendChild(n);
寫個用來動態新增節點js的程式碼:
/*
es6 中 函式設定預設引數可以使用 例:function 函式名(變數= 預設值) {...}
如果想要相容可以使用 例:function 函式名(變數) {if(變數==undefined){變數= 預設值}....}
*/
function cr_node(i, l = "body") { //建立節點並新增
t = i.split(".").reverse()[0];//獲取字尾
var n = null;
if (t == "js") {//字尾判斷
n = document.createElement("script");
n.setAttribute("type", "text/javascript");
n.setAttribute("src", i);
} else if (t == "css") {
n = document.createElement("link");
n.setAttribute("rel", "stylesheet");
n.setAttribute("href", i);
}
if (n != null) {
if (l == "body") {
document.body.appendChild(n);
} else if (l == "head") {
document.head.appendChild(n);
} else {
l.appendChild(n);
}
}
return n;
}
使用示例:
//新增bootstrap樣式
cr_node("http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css","head")
//預設新增jquery到<body>...</body>
cr_node("http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js");
//新增jquery到<head>...</head>
cr_node("http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js","head");
//新增jquery到<div id="id">...</div>
cr_node("http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js",document.getElementById("id"))
2.新增繫結事件函式
新增單個節點並繫結 事件
function cr_node(i, l = "body") {....}
function addNode(o, c = undefined) { //單個新增
var n = null;
if(typeof(o) == "object") {
n = cr_node(o.src, (o.parent ? o.parent : "body"));
if(typeof(o.load) == "function") {
n.onload = o.load; //繫結載入事件
}
if(typeof(o.err) == "function") {
n.onerror = o.err; //繫結錯誤事件
}
} else if(typeof(o) == "string") {
n = cr_node(o); //直接新增節點
if(typeof(c) == "function") {
n.onerror = n.onload = c; //繫結載入事件
}
}
}
使用說明:
//直接使用
addNode("http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js",function(){...});
//完整使用
addNode({
"src": "http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js",
"load": function() {
console.log("載入成功");
console.log($("body").html());
},
"err":function() {
console.log("載入失敗");
},
"parent": document.getElementById("id")//不寫預設是body
})
3.嘗試寫個批量新增的函式
如果僅僅是新增可以使用以下函式:
function addNodes(o, index = 0) { //多個新增
if (o.src.length > index && typeof(o.src) == "object" && o.src.length > 0) {
var n = cr_node(o.src[index], o.parent);
if (o.src.length - 1 == index && typeof(o.load) == "function") {
n.onerror = n.onload = o.load;
} else {
n.onerror = n.onload = function() {
addNodes(o, index + 1);
}
}
}
}
使用示例:
addNodes({
"src":["http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css","http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js","http://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js","http://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"],
"parent":"head",
"load":function(){
console.log(1111);
console.log($("body").html());
}
})
動態插入節點載入js/css,其實是非同步載入,所以在批量載入中我使用類似同步載入的辦法來保證所有檔案載入完成後呼叫函式,防止非同步造成檔案為讀取完就執行導致的報錯
如果大家也有好的辦法歡迎留言。
相關文章
- javascript如何動態載入js檔案JavaScriptJS
- 優雅的實現動態載入 css、jsCSSJS
- js動態載入 js檔案和 css檔案JSCSS
- webpack loader—自己寫一個按需載入外掛Web
- 原生JS動態載入JS、CSS檔案及程式碼指令碼JSCSS指令碼
- Spring Boot 如何熱載入jar實現動態外掛?Spring BootJAR
- Spring Boot 如何熱載入 jar 實現動態外掛?Spring BootJAR
- 支援無限載入的js圖片畫廊外掛JS
- Android-動態載入外掛資源,皮膚包的實現原理Android
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- 自己模擬遊戲引擎,動手寫個js碰撞檢測外掛遊戲引擎JS
- JavaScript動態建立div並寫入文字JavaScript
- queryList 配合 PhantomJS 外掛 採集 JavaScript 動態渲染的頁面JSJavaScript
- 如何寫一個Vue的外掛Vue
- 實現移動端上拉載入和下拉重新整理的vue外掛(mescroll.js)VueJS
- Pro Motion Blur Mac(動態模外掛fcpx外掛)Mac
- 位元組碼技術---------動態代理,lombok外掛底層原理。類載入器Lombok
- 【Dotnet 工具箱】DotNetCorePlugins- 動態載入和解除安裝 .NET 程式外掛NetCorePlugin
- 自己寫一個vue的loading外掛Vue
- 自己寫一個Babel外掛Babel
- SyntaxHighlighter 頁面動態js載入方式整理JS
- javascript 動態修改css樣式JavaScriptCSS
- Vue實現一個圖片懶載入外掛Vue
- arcgis js:動態引入js、css依賴JSCSS
- js 外掛JS
- cad載入外掛快捷鍵命令 cad安裝外掛的快捷鍵
- JavaScript系列:動態建立iframe並載入頁面JavaScript
- 用Class寫一個記住使用者離開位置的js外掛JS
- 如何用原生js來寫一個swiper滑塊外掛(上)原理JS
- 編寫一個簡單的babel外掛Babel
- mini-css-extract-plugin外掛快速入門CSSPlugin
- 一種Blazor開發模式下CSS的動態載入方法Blazor模式CSS
- 移動端上拉載入和下拉重新整理的vue外掛Vue
- javascript動態改變css3的animationJavaScriptCSSS3
- win10外掛字幕srt怎麼載入_win10外掛字幕srt如何載入Win10
- 怎樣用原生js配合css的transition寫個無縫滾動JSCSS
- 解析Sermant熱插拔能力:服務執行時動態掛載JavaAgent和外掛Java
- 字幕字型滾動外掛——scroxt.jsJS
- fullPage.js全屏滾動外掛APIJSAPI