There are many kinds of wait controls found online, but they are all complicated and not necessarily easy to use. Besides, my project is bootstrap, and I don’t dare to use third-party controls easily for fear of incompatibility, so I wrote it myself. A waiting control, its technical points include dynamic loading of CSS and JavaScript namespace, so record it.
This waiting control mainly displays an information prompt before performing an operation: "Data is loading, please wait...". After the operation is successful, the prompt disappears in the callback function. The principle is that this waiting control It is completely added dynamically by JS, including CSS, and there is no preset in the page.
So how to load this CSS dynamically? In the waiting control, the style uses classes. If we write these classes in the style file in advance, the calling page must not only reference the relevant JS files, but also reference the CSS files; even if this css file is dynamically loaded in the js file, but you want to Thinking about it, such a simple control contains 2 files, which is a bit of a fuss.
I dynamically piece together and load CSS in JS.
The code is as follows:
var FTabPages = function () { var tabKeeper = null; // e.g. // tabKeeper = { // container: "" // , isErase: true // , url: "" // , params: {} // , callback: null // }; var wrap = $(document.body); function initTab(tabJson) { tabKeeper = tabJson; } function onTab(tabJson) {//切换页签 if (tabKeeper != null) { var divPrev = $(tabKeeper.container); if (tabKeeper.isErase) { divPrev.empty(); } divPrev.css("display", "none"); } tabKeeper = tabJson; var div = $(tabJson.container); div.css("display", ""); if ($.trim(div.html()).length == ) {//首次加载或已清空 loadwaiting(); getViewRequest(tabJson.url, tabJson.params, function (data) { div.empty().html(data); docallback(tabJson.callback); removeloading(); }, function (data) { alert("数据获取超时或失败!"); removeloading(); }); } else {//非首次加载,隐藏但不清空 docallback(tabJson.callback); } } function getViewRequest(url, params, onsuccess, onerror) { $.ajax({ type: 'get', url: url, data: params, contentType: "text/html; charset=utf-", timeout:, success: function (data) { if (onsuccess != undefined && onsuccess != null) { onsuccess(data); } }, error: function (data) { if (onerror != undefined && onerror != null) { onerror(data); } } }); } function docallback(callback) { if (typeof callback != 'undefined' && callback instanceof Function) { callback(); } } function resetTab() {//刷新当前页签 loadwaiting(); var div = $(tabKeeper.container); getViewRequest(tabKeeper.url, tabKeeper.params, function (data) { div.empty().html(data); div.css("display", ""); docallback(tabKeeper.callback); removeloading(); }); } function loadwaiting() {//显示等待信息 $("<div class=\"datagrid-mask\"></div>").css({ display: "block", width: wrap.width(), height: wrap.height() }).appendTo(wrap); $("<div class=\"datagrid-mask-msg\"></div>").html("数据加载中,请稍候...").appendTo(wrap).css({ display: "block", left: (wrap.width() - $("div.datagrid-mask-msg", wrap).outerWidth()) / , top: ($(window).height() - $("div.datagrid-mask-msg", wrap).outerHeight()) / }); } function removeloading() {//隐藏等待信息 wrap.find("div.datagrid-mask-msg").remove(); wrap.find("div.datagrid-mask").remove(); } function initloading() {//设置等待控件样式 var css = ".datagrid-mask { "; css += " position: absolute; "; css += " left: ; "; css += " top: ; "; css += " width: %; "; css += " height: %; "; css += " opacity: .; "; css += " filter: alpha(opacity=); "; css += " display: none; "; css += "} "; css += ".datagrid-mask-msg { "; css += " position: absolute; "; css += " top: %; "; css += " margin-top: -px; "; css += " padding: px px px px;"; css += " width: auto; "; css += " height: px; "; css += " border-width: px; "; css += " border-style: solid; "; css += " display: none; "; css += "}"; //动态加载CSS if (document.all) { window.style = css; document.createStyleSheet("javascript:style"); } else { var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; document.getElementsByTagName('HEAD').item().appendChild(style); } } initloading(); return {//这里是供外部调用的方法 onTab: function (tabJson) { onTab(tabJson); } , resetTab: function () { resetTab(); } , init: function (tabJson) { initTab(tabJson); } }; }();
How to call it externally? That’s it:
FTabPages.init({ container: "#div_BasicInfo" , isErase: true , url: "http://blog.csdn.net/leftfist" , params: {} , callback: function () { alert("Hello World!"); } });
The above is about the implementation process of JavaScript front-end wait control. I hope this article will be helpful to everyone.