QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 2222|回复: 0

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

[复制链接]

等级头衔

积分成就    金币 : 2841
   泡泡 : 1516
   精华 : 6
   在线时间 : 1294 小时
   最后登录 : 2024-11-21

丰功伟绩

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

联系方式
发表于 2021-11-10 10:22:05 | 显示全部楼层 |阅读模式
       前端开发中仅在需要时的时候加载 JavaScript 模块。这样可以提供很大的性能,比如:您有一个组件,例如复杂的视频播放器,它可以使用大量 js,并且该视频仅在用户单击它时才会启动。那么在这种情况下,用户甚至可能永远不会单击播放按钮,因此仅在需要时才加载该js模块。+ [, @& R" J* J: o; e: E( b; h
1.jpg 8 a3 n, c. D/ i8 o' A2 w) U
       因此,不要像这样使用顶级默认声明:
. Z" L+ v! W& [) y  s
  1. import * from "https://cdn.skypack.dev/jquery";
      只是在需要的时候加载,代码如下:
. V- [& ?* k7 k/ b" o* r
  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. }
      您甚至可以将它与加载指示器之类的东西一起使用:" x  N% G! ~# ^# S6 U; x8 X9 S
  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方法:. W) ?+ Y- A! Q+ J& A
  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号|渝公网安备50010502503914号 )

GMT+8, 2024-11-21 23:08

Powered by paopaomj X3.5 © 2016-2025 sitemap

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