前端等待控件有啥新奇的?什么jquery啦,第三方控件啦,好多好多,信手拈来。

因为项目使用了bootstrap的原因,不想轻易使用第三方,怕不兼容。自己写一个。

技术点包括动态加载CSS,javascript的命名空间,所以记录一下。

这个等待控件主要是:进行某个操作前,显示一个信息提示:“数据加载中,请稍候。。。”,操作成功后,在回调函数中将提示消失。

原理是这个等待控件完全由JS动态加进去,包括CSS,页面中并无预先设定。

那么这个CSS怎么动态加载呢?等待控件中,样式使用了class,如果我们将这些class预先写在样式文件中,那么调用页面除了要引用相关JS文件,还要引用CSS文件;就算在js文件中动态加载此css文件,但想想看,一个如此简单的控件就包含了2个文件,小题大做了点。

我是在JS中动态拼凑、加载CSS。

代码如下:

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 == 0) {//首次加载或已清空
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-8",
timeout:30000,
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()) / 2, top: ($(window).height() - $("div.datagrid-mask-msg", wrap).outerHeight()) / 2 });
}
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: 0; ";
css += " top: 0; ";
css += " width: 100%; ";
css += " height: 100%; ";
css += " opacity: 0.3; ";
css += " filter: alpha(opacity=30); ";
css += " display: none; ";
css += "} ";
css += ".datagrid-mask-msg { ";
css += " position: absolute; ";
css += " top: 50%; ";
css += " margin-top: -20px; ";
css += " padding: 10px 5px 10px 10px;";
css += " width: auto; ";
css += " height: 16px; ";
css += " border-width: 2px; ";
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(0).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写一个前端等待控件的更多相关文章

  1. 写一个自定义的控件接口 C#

    以下是我的测试代码:APP_Code/ucInterface.cs /* APP_Code/ucInterface.cs */ /// <summary> /// Summary desc ...

  2. 从 .NET 到 JavaScript —— 纯前端报表控件 ActiveReportsJS 焕新登场

    报表工具的发展史,最早可以追溯到微软报表SSRS(SQL Server Reporting Services)时期.最初,报表工具主要应用于报表的定制.呈现和输出.经过几十年的发展,随着各种业务系统功 ...

  3. 【React】开发一个城市选择控件

    想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...

  4. 纯前端表格控件SpreadJS以专注业务、提升效率赢得用户与市场

    提起华为2012实验室,你可能有点陌生. 但你一定还对前段时间华为的那封<海思总裁致员工的一封信>记忆犹新,就在那篇饱含深情的信中,我们知道了华为为确保公司大部分产品的战略安全和连续供应, ...

  5. 【新功能前瞻】SpreadJS 纯前端表格控件V12.2:打印增强、拖拽填充等六大特性

    新版本来袭:葡萄城 SpreadJS 纯前端表格控件的全新版本 V12.2 将于8月正式发布! 作为一款备受华为.招商银行.中国平安.苏宁易购等行业专家和前端开发者认可的纯 JavaScript 电子 ...

  6. 如何用 Swift 语言构建一个自定控件

    (via:破船之家,原文:How To Make a Custom Control in Swift)   用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它 ...

  7. 【案例分享】在 React 框架中使用 SpreadJS 纯前端表格控件

    [案例分享]在 React 框架中使用 SpreadJS 纯前端表格控件 本期葡萄城公开课,将由国电联合动力技术有限公司,资深前端开发工程师——李林慧女士,与大家在线分享“在 React 框架中使用 ...

  8. ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起

    第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...

  9. C++ 一个程序获取另一个程序Edit控件的内容

    //一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ...

随机推荐

  1. 同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致

    背景 今天遇到如下问题,同一sql语句在PLSQL Developer与SQL*PLUS工具中执行结果不一致, sql语句如下 SELECT 'GROUPHEALTH_SEND_EMAIL' as i ...

  2. POJ 1201 Intervals(差分约束 区间约束模版)

    关于差分约束详情可阅读:http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html 题意: 给定n个区间[L,R], 每个区间至 ...

  3. 为什么在属性中设置private set

    引言: 属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性.属性包括get和set,分 ...

  4. [SHELL]awk的用法举例

    从初学awk到现在小有所成,非常感谢CUers的帮助,总结了下自己曾经遇到的问题和犯的错误,供初学者借鉴,因本人非计算机专业,对专业词汇可能有表述不对的地方,还请指正和补充! 1. awk '{cod ...

  5. 一、SQL基础知识点补充

    SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插 ...

  6. xtu字符串 B. Power Strings

    B. Power Strings Time Limit: 3000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java c ...

  7. [luoguP2015] 二叉苹果树(DP)

    传送门 貌似是个树形背包... 好像吧.. f[i][j]表示节点i选条边的最优解 #include <cstdio> #include <cstring> #include ...

  8. POJ 1273 Drainage Ditches【图论,网络流】

    就是普通的网络流问题,想试试新学的dinic算法,这个算法暑假就开始看国家集训队论文了,之前一直都只用没效率的EK算法,真正学会这个算法还是开学后白书上的描述:dinic算法就是不断用BFS构建层次图 ...

  9. php 基础复习 2018-06-18

    (1)cookie相关 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie. 如何创建 cookie? se ...

  10. bit manipulation

    WIKI Bit manipulation is the act of algorithmically manipulating bits or other pieces of data shorte ...