常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数


Posted in Javascript onSeptember 23, 2016

为了方便资源管理和提升工作效率,常用的js和css文件的加载应该放在一个统一文件里面完成,也方便后续的资源维护。所以我用js写了以下方法,存放在“sourceController.js”文件内。

function sourceController(){
  var root = "";
  var cssCount = 0; // css加载计数器
  var jsCount = 0; // js加载计数器

  this.callfunc = null; // 回调函数

  this.opt = {
    root : root
  };

  this.css = {
    css0 : "javaScript/bootstrap/css/bootstrap.css",
    css1 : "css/iconfont/iconfont.css",
    css2 : "css/common.css"
  };

  this.script = {
    script0 : "javaScript/jquery.js",
    script1 : "javaScript/bootstrap/js/bootstrap.js"
  };

  /* 设置文件根目录
   * @param url 根目录地址
   */
  this.setRoot = function(url){
    root = url;
  };

  /* 设置回调函数
   * @param func 回调函数
   */
  this.setCallBack = function(func){
    this.callfunc = func;
  };

  /* 添加Script文件 请在addSource钱调用
   * @param url script文件路径
   */
  this.addScript = function(url){
    if (url === "" || url == null) return;
    this.script["script" + Object.getOwnPropertyNames(this.script).length] = url;
  };

  /* 添加CSS文件 请在addSource钱调用
   * @param url css文件路径
   */
  this.addCss = function(url){
    if (url === "" || url == null) return;
    this.css["css" + Object.getOwnPropertyNames(this.css).length] = url;
  };

  /* 添加常用资源 */
  this.addSource = function(){
    console.log("Source");
    addMeta([["http-equiv", "X-UA-Compatible"],["content", "IE=edge"]]);
    addMeta([["name", "viewport"],["content", "width=device-width, initial-scale=1"]]);

    createCss(this);
  };

  /* 回调函数
   * @param func 回调方法
   * @param obj 当前对象
   */
  function callback(obj){
    console.log("func run");
    obj.callfunc();
  }

  /* 添加<link> 默认先加载css
   * @param obj 当前对象
   */
  function createCss(obj){
    // 如果没有css文件,不加载
    if(Object.getOwnPropertyNames(obj.css).length <= 0) return;
    var url = obj.css["css" + cssCount];
    console.log(url);
    var css = document.createElement("link");
    css.setAttribute("rel", "stylesheet");
    if (root != "") {
      url = root + "/" + url;
    }
    css.href = url;
    document.getElementsByTagName("head")[0].appendChild(css);
    css.onload = function(){
      cssCount++;
      if (cssCount < Object.getOwnPropertyNames(obj.css).length){
        createCss(obj);
      }else{
        // 如果有js文件,开始加载js
        if(Object.getOwnPropertyNames(obj.script).length > 0){
          createJs(obj);
        }
      }
    };
  }

  /* 添加<script> js加载完后执行回调函数
   * @param obj 当前对象
   */
  function createJs(obj){
    // 如果没有js文件,不加载
    if(Object.getOwnPropertyNames(obj.script).length <= 0) return;
    var url = obj.script["script" + jsCount];
    console.log("time:" + new Date().getTime() + " " + url);
    var script = document.createElement("script");
    script.setAttribute("type","text/javascript");
    if (root != "") {
      url = root + "/" + url;
    }
    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
    script.onload = function(){
      jsCount++;
      if (jsCount < Object.getOwnPropertyNames(obj.script).length){
        createJs(obj);
      }else{
        // 如果有回调函数 执行回调函数
        if(obj.callfunc != null){
          callback(obj);
        }
      }
    }
  }

  /* 添加meta
   * @param attr meta属性,为二维数组
   */
  function addMeta(attr){
    console.log("meta");
    var meta = document.createElement("meta");
    for (var i = 0; i < attr.length; i++){
      meta.setAttribute(attr[i][0], attr[i][1]);
    }
    document.getElementsByTagName("head")[0].appendChild(meta);
  }
}

在需要引入的页面只需要在<head>加入如下代码就可以一下子引入所有的常用资源了。为了显示美观在所有布局完成之间body设置visibility为hidden,布局完成后显示出来。

window.onload = function(){
  var sc = new sourceController();
  sc.addCss("css/index.css"); // 额外添加的css文件,必须在加载资源之前加入
  sc.addScript("javaScript/index.js"); // 额外添加的js文件,必须在加载资源之前加入
  sc.setCallBack(function(){
    document.body.style.display = "block"; // 显示body
  });
  sc.addSource(); // 加载常用的js和css文件
};

以上就是小编为大家带来的常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

Javascript 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
JavaScript 无符号右移运算符
Apr 17 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
js阻止事件追加的具体实现
Oct 15 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
react实现antd线上主题动态切换功能
Aug 12 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 Javascript
form表单转Json提交的方法(推荐)
Sep 23 #Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 #Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
Sep 23 #Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 #Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 #Javascript
值得分享的bootstrap table实例
Sep 22 #Javascript
第一次动手实现bootstrap table分页效果
Sep 22 #Javascript
You might like
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Django 再谈一谈json序列化
2020/03/16 Python
Python设计密码强度校验程序
2020/07/30 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
大专生简历的自我评价
2013/11/26 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
法人代表资格证明书
2015/06/18 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
Django 实现jwt认证的示例
2021/04/30 Python