ホームページ > 記事 > ウェブフロントエンド > 独自の JavaScript フロントエンド待機 control_javascript スキルを作成する
オンラインにはさまざまな種類の待機コントロールがありますが、どれも複雑で必ずしも使いやすいわけではありません。また、私のプロジェクトはブートストラップであり、非互換性を恐れてサードパーティのコントロールを簡単に使用する勇気はありません。待機中のコントロールです。技術的なポイントとしては CSS と JavaScript 名前空間の動的読み込みが含まれるため、記録します。
この待機コントロールは主に、操作を実行する前に「データをロード中です。お待ちください...」という情報プロンプトを表示します。操作が成功すると、この待機コントロールはコールバック関数内でプロンプトが表示されなくなります。 CSS を含む JS によって完全に動的に追加され、ページ内にプリセットはありません。
では、この CSS を動的にロードするにはどうすればよいでしょうか?待機中のコントロールでは、スタイルはクラスを使用します。これらのクラスをスタイル ファイルに事前に記述すると、呼び出し元のページは、この CSS ファイルが動的に読み込まれる場合でも、関連する JS ファイルを参照するだけでなく、CSS ファイルも参照する必要があります。 js ファイルを作成したいのですが、考えてみると、このような単純なコントロールには 2 つのファイルが含まれており、少し面倒です。
動的に結合して CSS を JS にロードします。
コードは次のとおりです:
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); } }; }();
外部から呼び出すにはどうすればよいですか?以上:
FTabPages.init({ container: "#div_BasicInfo" , isErase: true , url: "http://blog.csdn.net/leftfist" , params: {} , callback: function () { alert("Hello World!"); } });
以上はJavaScriptのフロントエンド待機制御の実装プロセスについてでした。この記事が皆様のお役に立てれば幸いです。