自己动手写的javascript前端等待控件


Posted in Javascript onOctober 30, 2015

等待控件在网上搜有好多种,但是都很复杂,不一定用的顺手,再说我的项目是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 == ) {//首次加载或已清空
      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前端等待控件的实现过程,希望本文所述对大家有所帮助。

Javascript 相关文章推荐
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
Aug 15 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
Sep 16 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
在ABP框架中使用BootstrapTable组件的方法
Jul 31 Javascript
微信小程序系列之自定义顶部导航功能
May 21 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 #Javascript
JavaScript获取function所有参数名的方法
Oct 30 #Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 #Javascript
jQuery实现切换页面过渡动画效果
Oct 29 #Javascript
js实现跨域的4种实用方法原理分析
Oct 29 #Javascript
异步JS框架的作用以及实现方法
Oct 29 #Javascript
图解JavaScript中的this关键字
May 28 #Javascript
You might like
一个很不错的PHP翻页类
2009/06/01 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
Git命令之分支详解
2021/03/02 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
简单谈谈python中的多进程
2016/11/06 Python
python常见排序算法基础教程
2017/04/13 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
一百多行python代码实现抢票助手
2018/09/25 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python实现AES加密解密
2019/03/28 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
银行开业庆典方案
2014/02/06 职场文书
师德师风自我评价范文
2014/09/11 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
南京导游词
2015/02/03 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
结婚幸福感言
2015/08/01 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python