zoukankan      html  css  js  c++  java
  • 动态导入Js文件

    var ScriptLoader = {
        worker: 0,
        isWait: false,
        readyQueue: [],
        callback: [],
        timer: null,
    
        wait: function () {
            if (!this._isComplateTask()) {
                this.isWait = true;
                this.readyQueue.unshift('wait');
            }
            //console.log('wait is true');
            return this;
        },
    
        _isComplateTask: function () {
            return this.worker === 0;
        },
    
        loadJs: function (url, async, callback) {
            console.log('load js ' + url);
            if (this.isWait) {
                // 将js加载到队列
                this.readyQueue.unshift(url);
                this.callback.unshift(callback);
    
                if (!this.timer) {
                // 定时处理队列
                    var that = this;
                    this.timer = setInterval(function () {
                        if (that.readyQueue.length === 0) {
                        // 队列消费完, 清除定时器
                            clearInterval(that.timer);
                            that.timer = null;
                        } else if (that._isComplateTask()) {
                            that._loadReady();
                        }
                    }, 50);
                }
            } else {
                this._realLoad(url, async, callback);
            }
            return this;
        },
    
        /**
         * 消费队列
         */
        _loadReady: function () {
            var url;
            while (this.readyQueue.length > 0) {
                url = this.readyQueue.pop();
                if (url === 'wait') {
                    if (!this._isComplateTask()) {
                        this.isWait = true;
                        break;
                    }
                } else {
                    this._realLoad(url, true, this.callback.pop());
                }
            }
        },
    
        _realLoad: function (url, async, callback) {
            this.worker++;
            var that = this;
            console.log('start load js ' + url);
            this._loadJsFile(url, function () {
                that.worker--;
                if (that.worker === 0) {
                    //console.log('wait is false');
                    that.isWait = false;
                }
                if(callback){
                    callback();
                }
            }, async);
        },
    
        _loadJsFile: function (file, callback, async) {
            var head, d = document;
            ((head = d.getElementsByTagName('head')[0]) || (head = d.body.parentNode.appendChild(d.createElement("head"))));
    
            var script = d.createElement("script");
            script.type = "text/javascript";
            script.src = file;
            script.charset = 'UTF-8';
            if (async) {
                script.async = true;
            }
    
            if (script.readyState) {//IE
                script.onreadystatechange = function () {
                    if (script.readyState === "loaded" || script.readyState === "complete") {
                        script.onreadystatechange = null;
                        callback();
                    }
                };
            } else {//其他浏览器
                script.onload = function () {
                    callback();
                };
            }
    
            head.appendChild(script);
        }
    };

  • 相关阅读:
    spark SQL之 DataFrame和DataSet
    scala之 保留小数
    spark之 避免数据倾斜之 给名字分区(百家姓)
    hive之 'client_protocol' is unset!
    hive之报错:ls:cannot access '/usr/local/spark/lib/spark-assembly-*.jar':No such file or directory
    hive之 Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061) ----Hive schematool -initSchema
    Maven中需要注意的点
    spark之 Idea操作
    scala之 一句话打印三角形
    scala 之 BaseDao
  • 原文地址:https://www.cnblogs.com/sky-net/p/10030350.html
Copyright © 2011-2022 走看看