自己动手写的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 相关文章推荐
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
Oct 29 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 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
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
Laravel find in set排序实例
2019/10/09 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
原生JS轮播图插件
2017/02/09 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python实现大文件排序的方法
2015/07/10 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
智能室内花园:Click & Grow
2021/01/29 全球购物
入党自我评价范文
2014/02/02 职场文书
课程改革实施方案
2014/03/16 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
孙振耀退休感言
2015/08/01 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python