常用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 相关文章推荐
基于jquery的direction图片渐变动画效果
May 24 Javascript
jQuery源码分析之Event事件分析
Jun 07 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
js中widow.open()方法使用详解
Jul 30 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 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
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
jquery禁用右键示例
2014/04/28 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
python plotly画柱状图代码实例
2019/12/13 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
python 弧度与角度互转实例
2020/04/15 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
意向协议书范本
2014/04/23 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书