php 加载后执行js,脚本加载后执行JS回调函数的方法

这次给大家带来脚本加载后执行JS回调函数的方法,脚本加载后执行JS回调函数的注意事项有哪些,下面就是实战案例,一起来看一下。

项目中经常会遇到这样的问题:当某个 js 脚本加载完成后再执行相应任务,但很多朋友可能并不知道怎么判断我们要加载的 js

文件是否加载完成,如果没有加载完成我们就调用 js 文件里面的函数是不会成功的。本文主要讲解怎么在成功加载 js 文件后再执行相应回调任务。

基本思路

我们可以动态的创建

动态脚本简单示例

一个 简单 的实现过程如下:// IE下:

var HEAD = document.getElementsByTagName('head')[0] || document.documentElement

var src = 'http://xxxxxx.com'

var script = document.createElement('script')

script.setAttribute('type','text/javascript')

script.onreadystatechange = function() {

if(this.readyState === 'loaded' || this.readyState === 'complete') {

console.log('加载成功!')

}

}

script.setAttribute('src', src)

HEAD.appendChild(script)

// Chrome等现代浏览器:

var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;

var src = 'http://xxxxxx.com'

var script = document.createElement('script')

script.setAttribute('type','text/javascript')

script.onload = function() {

console.log('加载成功!')

}

script.setAttribute('src', src)

HEAD.appendChild(script)

原理很简单,根据这两个简单的原理,我们进行一些修改,我把改成了两个函数,分别是 串行加载 和 并行加载 。

串行和并行动态脚本

当传一个包含多个JS文件路径的数组时,串行加载函数从第一个脚本文件加载开始,每加载成功一个便开始加载下一个脚本文件,全部加载完成后执行回调函数。而并行加载是一开始便加载全部的脚本文件,也就是他们从同一点开始加载,当全部加载完成后,执行回调函数。/**

* 串行加载指定的脚本

* 串行加载[异步]逐个加载,每个加载完成后加载下一个

* 全部加载完成后执行回调

* @param {Array|String} scripts 指定要加载的脚本

* @param {Function} callback 成功后回调的函数

* @return {Array} 所有生成的脚本元素对象数组

*/

function seriesLoadScripts(scripts, callback) {

if(typeof(scripts) !== 'object') {

var scripts = [scripts];

}

var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;

var s = [];

var last = scripts.length - 1;

//递归

var recursiveLoad = function(i) {

s[i] = document.createElement('script');

s[i].setAttribute('type','text/javascript');

// Attach handlers for all browsers

// 异步

s[i].onload = s[i].onreadystatechange = function() {

if(!/*@cc_on!@*/0 || this.readyState === 'loaded' || this.readyState === 'complete') {

this.onload = this.onreadystatechange = null;

this.parentNode.removeChild(this);

if(i !== last) {

recursiveLoad(i + 1);

} else if (typeof(callback) === 'function') {

callback()

};

}

}

// 同步

s[i].setAttribute('src', scripts[i]);

HEAD.appendChild(s[i]);

};

recursiveLoad(0);

}

/**

* 并行加载指定的脚本

* 并行加载[同步]同时加载,不管上个是否加载完成,直接加载全部

* 全部加载完成后执行回调

* @param {Array|String} scripts 指定要加载的脚本

* @param {Function} callback 成功后回调的函数

* @return {Array} 所有生成的脚本元素对象数组

*/

function parallelLoadScripts(scripts, callback) {

if(typeof(scripts) !== 'object') {

var scripts = [scripts];

}

var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;

var s = [];

var loaded = 0;

for(var i = 0; i < scripts.length; i++) {

s[i] = document.createElement('script');

s[i].setAttribute('type','text/javascript');

// Attach handlers for all browsers

// 异步

s[i].onload = s[i].onreadystatechange = function() {

if(!/*@cc_on!@*/0 || this.readyState === 'loaded' || this.readyState === 'complete') {

loaded++;

this.onload = this.onreadystatechange = null;

this.parentNode.removeChild(this);

if(loaded === scripts.length && typeof(callback) === 'function') callback();

}

};

// 同步

s[i].setAttribute('src',scripts[i]);

HEAD.appendChild(s[i]);

}

}

在这里是把

使用方法

这里声明了一个数组变量,里面包含了两个远程的JS文件地址(当然

"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js",

"http://wellstyled.com/files/jquery.debug/jquery.debug.js"

];

// 这两个文件分别是 jQuery 1.4.的库文件和 jQuery Debug 插件

// 然后你可以使用下面的方法调用并在成功后执行回调了。

parallelLoadScripts(scripts, function() {

/*

debug = new $.debug({

posTo : { x:'right', y:'bottom' },

width: '480px',

height: '50%',

itempider : '


',

listDOM : 'all'

});

*/

console.log('脚本加载完成啦');

});

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

以上就是脚本加载后执行JS回调函数的方法的详细内容,更多请关注php中文网其它相关文章!

article_wechat2021.jpg?1111

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值