前言
本文介绍的是自定义require函数让浏览器实现按需加载Js文件,那到底要怎么自己写一个按需加载的库呢
为了实现按需加载:
//这是我们要实现的功能,require('str.js')
时加载str.js文件,并创建一个叫str对象,等加载完毕之后执行str对象的ready方法里的函数。
var str = require('str.js'); str.ready(show); //要执行的函数 function show(res){ console.log(res); } //str.js 文件,提供"我是str"字符串 //require.js 这个是我们要写的库
实现思路
1、如何加载str.js文件呢?
A:我们可以插入一个<script src="/UploadFiles/2021-04-02/str.js"> ,这样不仅加载了str.js,里面的代码还可以被浏览器自动运行呢。
2、如何判断str.js文件已经加载完毕?
A:可以在str.js文件里执行一个函数,通知大家,我已经加载完了。
3、require('str.js')
返回一个对象,这个对象要怎么和str.js相关联呢?
A:我们可以创建一个叫JS['str.js']
的对象,使str指向这个对象就行了。
4、我不想把代码都写进一个ready里面,我要写在很多个ready里面,加载完之后它们都能执行吗?
A:不管多少个ready,没加载完的时候,都会丢进一个队列里面先保存着,所以我们需要一个队列。
5、加载完的那个时刻触发ready,那加载完之后我再写的ready函数,就不执行吗?
A:也会执行,所以,在加载完的那个时刻,我们将重写ready函数。
6、这么多东西20行代码能完成吗?
A:....
执行方案
根据上诉思路,写了一个require.js文件:
function require(path){ //比如我们require('js/str.js') , 我们需要获取'str.js'这个文件名 var filename = path.split('/'); filename = filename[filename.length-1]; JS[filename]={ fn:[/*这个就是(4)中提到的那个队列*/], //这是(2)中提到的方法,str.js文件里面执行这个方法就代表它加载完了 ready:function(){ JS[filename].fn.forEach(function(fn){ //JS['str.js'].export就是str.js要提供的东西:'我是str' fn(JS[filename].export); }); //这是(5)中提到的,ready函数的重写 JS[filename].rt.ready = function(fn){ fn(JS[filename].export); }; }, rt:{ ready:function(fn){JS[filename].fn.push(fn)}//这个就是str对象的ready函数 } }; //这是(1)中提到的插入script标签 var script = document.createElement('script'); script.src = path; document.head.appendChild(script); //这是(3)中要返回的对象 return JS[filename].rt; }
接下来,就差str.js的写法了:
/* 这里你想写什么代码都行,推荐写在闭包里,以免污染全局变量 */ JS['str.js'].export = '我是str';//这个是供大家使用的参数 JS['str.js'].ready();//执行这个函数,通知大家,str.js加载完毕了
确认一下执行结果
<!DOCTYPE html> <script src="/UploadFiles/2021-04-02/require.js">ok,一切正常。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。