QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

泡泡马甲APP 更多内容请下载泡泡马甲手机客户端APP 立即下载 ×
查看: 2127|回复: 0

[HTML/CSS/JS] 如何实现动态加载Javascript 文件模块

[复制链接]

等级头衔

积分成就    金币 : 2806
   泡泡 : 1516
   精华 : 6
   在线时间 : 1244 小时
   最后登录 : 2024-5-5

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2021-11-10 10:22:05 | 显示全部楼层 |阅读模式
       前端开发中仅在需要时的时候加载 JavaScript 模块。这样可以提供很大的性能,比如:您有一个组件,例如复杂的视频播放器,它可以使用大量 js,并且该视频仅在用户单击它时才会启动。那么在这种情况下,用户甚至可能永远不会单击播放按钮,因此仅在需要时才加载该js模块。
7 C2 `7 C( G' `0 N 1.jpg 0 n' V9 Z4 R: Z) N, b7 t$ H$ L5 C8 w
       因此,不要像这样使用顶级默认声明:. D: X* T' p& e
  1. import * from "https://cdn.skypack.dev/jquery";
      只是在需要的时候加载,代码如下:
6 ?$ u. m! Y/ l. i8 ?: h5 i3 u, ?4 E
  1. const button = document.getElementById("btn");
  2. button.addEventListener("click", e => {
  3.   import('https://cdn.skypack.dev/jquery')
  4.     .then(module => window.$ = module.default)
  5.     .then(makeBgOrangeWithJquery)
  6.     .catch(err => { alert(err) });
  7. });
  8. const makeBgOrangeWithJquery = ()=> {
  9.   $("body").css("background-color", "orangered");
  10. }
      您甚至可以将它与加载指示器之类的东西一起使用:
# p+ _' a4 K+ R+ L
  1. button.addEventListener("click", e => {
  2.     import('https://cdn.skypack.dev/jquery')
  3.     .then(module => {
  4.         window.$ = module.default;
  5.     })
  6.     .then(makeBgOrangeWithJquery)
  7.     .catch(err => { alert(err) });
  8. });
      当然,如果您的所有页面都依赖于像 jQuery 或 react 这样的库,那么动态导入该库就没有太大意义。目前es6中的import,export浏览器已经支持。在老版本浏览器中是不支持import的,但是我们可以自己来实现import方法:* {7 [9 O  H& z0 B
  1. function loadJS(url, success) {
  2.   var domScript = document.createElement('script');
  3.   domScript.src = url;
  4.   success = success || function () {};
  5.   domScript.onload = domScript.onreadystatechange = function () {
  6.     if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
  7.       success();
  8.       this.onload = this.onreadystatechange = null;
  9.       this.parentNode.removeChild(this);
  10.     }
  11.   }
  12.   document.getElementsByTagName('head')[0].appendChild(domScript);
  13. }
  14. loadJS('https://cdn.skypack.dev/jquery',function(){
  15.   //加载成功执行
  16. });
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号 )

GMT+8, 2024-5-8 16:20

Powered by paopaomj X3.4 © 2016-2024 sitemap

快速回复 返回顶部 返回列表