常用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 相关文章推荐
Prototype的Class.create函数解析
Sep 22 Javascript
window.onload追加函数使用示例
Mar 03 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
form+iframe解决跨域上传文件的方法
Nov 18 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
详解webpack+vue-cli项目打包技巧
Jun 17 Javascript
JS+canvas绘制的动态机械表动画效果
Sep 12 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
Oct 30 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
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
简单谈谈favicon
2015/06/10 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php压缩文件夹最新版
2018/07/18 PHP
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
js密码强度校验
2015/11/10 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
Javascript缓存API
2016/06/14 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
python retrying模块的使用方法详解
2019/09/25 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
精灵市场:Pixie Market
2019/06/18 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
高三自我评价
2014/02/01 职场文书
吨的认识教学反思
2014/04/27 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
选秀节目策划方案
2014/06/06 职场文书
公安学专业求职信
2014/07/27 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书