常用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 相关文章推荐
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
javascript闭包入门示例
Apr 30 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
jQ处理xml文件和xml字符串的方法(详解)
Nov 22 Javascript
JavaScript验证知识整理
Mar 24 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
webpack中使用iconfont字体图标的方法
Feb 22 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
原生JS实现留言板
Mar 26 Javascript
JavaScript实现图片放大预览效果
Nov 02 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php常量详细解析
2015/10/27 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
laravel 数据验证规则详解
2019/10/23 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python集合用法实例分析
2015/05/30 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
Python当中的array数组对象实例详解
2019/06/12 Python
Python新手学习标准库模块命名
2020/05/29 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
简约控的天堂:The Undone
2016/12/21 全球购物
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
捐款倡议书
2014/04/14 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
普通话演讲稿
2014/09/03 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书