常用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.js学习
Jun 13 Javascript
jsTree 基于JQuery的排序节点 Bug
Jul 26 Javascript
更换select下拉菜单背景样式的实现代码
Dec 20 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
window.onload与$(document).ready()的区别分析
May 30 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
jquery判断iPhone、Android设备类型
Sep 14 Javascript
JS调用某段SQL语句的方法
Oct 20 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 Javascript
Node对CommonJS的模块规范
Nov 06 Javascript
javascript代码实现简易计算器
Jan 25 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
如何将数据从文本导入到mysql
2006/10/09 PHP
Yii框架form表单用法实例
2014/12/04 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
javascript 闭包
2011/09/15 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
Python3实现二叉树的最大深度
2019/09/30 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
团支部推优材料
2014/05/21 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP