arcgis js:動態引入js、css依賴
從測試環境到生產環境,每個頁面中的arcgis js 、css依賴修改也較為繁瑣,在此,將其寫入配置檔案中,動態引入。
gisInit.js程式碼如下:
var gisConfigUrl = "configs/gisConfig.json";
loadConfig(gisConfigUrl,function(gisConfig) {
console.log(gisConfig);
var arcgisInitUrl = gisConfig.Map.arcgisInitUrl;
var arcgisCSSUrl = gisConfig.Map.arcgisCSSUrl;
var $arcgisCSS = "<link rel='stylesheet' type='text/css' href='"+arcgisCSSUrl+"'/>";
$("head").append($arcgisCSS);
loadScript(arcgisInitUrl, function () {
var $qingdao = $("<script src='js/qingdaoPoint.js'></script>");
$("body").append($qingdao);
})
})
/**
* 用於初始化載入arcgisJS檔案
* @param url傳入arcgisJS地址,讀取配置檔案傳入
* @param callback 完成載入後回撥函式
*/
function loadScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (typeof(callback) != "undefined") {
if (script.readyState) {
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function() {
callback();
};
}
};
script.src = url;
document.body.appendChild(script);
}
/**
* 載入配置檔案
* @param configUrl 配置檔案路徑
* @param callBack 回撥
*/
function loadConfig(configUrl,callBack) {
$.ajax({
async: false,
url: configUrl,
type: 'GET',
dataType: 'json',
}).done(function(data) {
callBack(data);
}).fail(function(data, status, desc) {
alert("無法獲取配置資訊或配置資訊有誤!");
throw new Error(status + "\n" + desc);
});
}
配置檔案如下:
{
"Map": {
"arcgisCSSUrl":"http://10.10.5.155:8080/arcgis_js_api_3.20/library/3.20/3.20/esri/css/esri.css",
"arcgisInitUrl": "http://10.10.5.155:8080/arcgis_js_api_3.20/library/3.20/3.20/init.js",
"baseMapUrl": "http://10.10.1.122:6080/arcgis/rest/services/tile/gaodeTile/MapServer"
}
}
上述程式碼保證了在arcgis init.js引入後再載入業務js檔案,避免了報require未定義的錯誤
2018.6.20改進更新,將底圖載入也寫在這一配置js中,同時將地圖操作js程式碼gisMap.js對應的路徑也寫入配置,方便更改
var basePath = location.origin + location.pathname.substring(0, location.pathname.substr(1).indexOf('/') + 1);
var gisConfigUrl = basePath + "/configs/gisConfig.json";
// var gisMapJsUrl = "js/gisMap.js";
var dojoConfig = {
parseOnLoad: true,
packages: [{
"name": "myModules",
"location": basePath + "/js/myModules"
}]
};
loadConfig(gisConfigUrl, function (gisConfig) {
console.log(gisConfig);
var arcgisInitUrl = gisConfig["Map"]["arcgisInitUrl"];
var arcgisCSSUrl = gisConfig["Map"]["arcgisCSSUrl"];
var gisMapJsUrl = gisConfig["JS"]["gisMapJsUrl"];
var $arcgisCSS = "<link rel='stylesheet' type='text/css' href='" + arcgisCSSUrl + "'/>";
$("head").append($arcgisCSS);
loadScript(arcgisInitUrl, function () {
initMap(gisConfig);
var $gisMapJs = $("<script src='" + gisMapJsUrl + "'></script>");
$("body").append($gisMapJs);
})
})
/**
* 用於初始化載入arcgisJS檔案
* @param url傳入arcgisJS地址,讀取配置檔案傳入
* @param callback 完成載入後回撥函式
*/
function loadScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (typeof(callback) != "undefined") {
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function () {
callback();
};
}
}
;
script.src = url;
document.body.appendChild(script);
}
/**
* 載入配置檔案
* @param configUrl 配置檔案路徑
* @param callBack 回撥
*/
function loadConfig(configUrl, callBack) {
$.ajax({
async: false,
url: configUrl,
type: 'GET',
dataType: 'json',
}).done(function (data) {
callBack(data);
}).fail(function (data, status, desc) {
alert("無法獲取配置資訊或配置資訊有誤!");
throw new Error(status + "\n" + desc);
});
}
/**
* 基礎底圖在此初始化
* @param gisConfig 配置資訊
*/
function initMap(gisConfig){
require(["esri/map",
"esri/layers/ArcGISTiledMapServiceLayer",
"dojo/domReady!"],
function (Map, ArcGISTiledMapServiceLayer) {
map = new Map("mapdiv", {
center: [120.313, 36.206],
zoom: 10,
maxZoom: 17,
minZoom: 4,
slider: false,
logo: false
});
var baseMapUrl = gisConfig["Map"]["baseMapUrl"];
var baseLayer = new ArcGISTiledMapServiceLayer(baseMapUrl);
map.addLayer(baseLayer);
})
}
gisConfig.json
{
"Map": {
"arcgisCSSUrl":"http://10.10.5.155:8080/arcgis_js_api_3.20/library/3.20/3.20/esri/css/esri.css",
"arcgisInitUrl": "http://10.10.5.155:8080/arcgis_js_api_3.20/library/3.20/3.20/init.js",
"baseMapUrl": "http://10.10.1.122:6080/arcgis/rest/services/tile/gaodeTile/MapServer"
},
"JS": {
"gisMapJsUrl": "js/gisMap.js"
}
}
相關文章
- JS動態引入模組JS
- js/css相關引入JSCSS
- 依賴引入 | Android依賴引入史上最全攻略Android
- Maven 引入外部依賴Maven
- android引入依賴,合集Android
- js動態載入 js檔案和 css檔案JSCSS
- 一, 建立工程,引入依賴
- js動態改變css偽類樣式JSCSS
- 原生JS動態載入JS、CSS檔案及程式碼指令碼JSCSS指令碼
- 優雅的實現動態載入 css、jsCSSJS
- mui仿京東地址 css + js (動態資料)UICSSJS
- js 和 css動畫JSCSS動畫
- 動態庫遞迴依賴專項遞迴
- eureka客戶端依賴引入爆紅客戶端
- js動畫 Css提供的運動 js提供的運動JS動畫CSS
- 使用 JS 來動態操作 css ,你知道幾種方法?JSCSS
- PHP引入合併多個JS和CSS檔案例項PHPJSCSS
- js動態時間JS
- 深入瞭解 Vue.js 是如何進行「依賴收集]Vue.js
- Android Studio中引入Gson依賴(簡述版)Android
- 第146篇:響應式動態居中(js+css,vue)JSCSSVue
- arcgis js:graphicLayer刪除特定的graphicJS
- 為什麼引入SpringBoot依賴不用加版本號Spring Boot
- 1.引入vue.jsVue.js
- 引入js檔案失敗JS
- 使用Jquery和Ajax的動態依賴選擇框jQuery
- 反射,註解,動態代理,依賴注入控制反轉反射依賴注入
- CSS in JS (JSS)CSSJS
- 客戶端的js js指令碼的引入 js的解析過程客戶端JS指令碼
- idea在pom中引入第三方依賴Idea
- Springboot引入thymeleaf依賴,在pom檔案中報錯。Spring Boot
- css動畫是否會被js阻塞CSS動畫JS
- Vue.js 動態元件使用Vue.js元件
- Next.js踩坑入門系列(五)— 引入狀態管理reduxJSRedux
- 90%的人都不知道的Node.js 依賴關係管理(上)Node.js
- 90%的人都不知道的Node.js 依賴關係管理(下)Node.js
- fastadmin: 避免引入頁面同名jsASTJS
- nginx 代理圖片、css、js等靜態資源NginxCSSJS