动态创建标签

动态创建的 <script >

let script = document.createElement("script");
script.src = "path/to/script.js";
document.body.appendChild(script);

动态创建的 <img>

let img = new Image();
img.src = 'path/to/image.jpg';
img.onload = function() {
  // 图片加载完成后执行代码
};

使用 defer 属性

<script> 标签中添加 defer 属性,可以将脚本的执行推迟到文档解析完成后再执行。

<script src="path/to/script.js" defer></script>

使用 async 属性

脚本会在下载完成后立即执行

<script src="path/to/script.js" async></script>

动态加载模块(ES6+)

使用动态 import() 方法来延迟加载模块。

import("path/to/module.js")
  .then((module) => {
    // 模块加载成功后的处理逻辑
  })
  .catch((error) => {
    // 模块加载失败的处理逻辑
  });

import() 方法返回一个 Promise,可以使用 then() 方法处理加载成功后的模块,或使用 catch() 方法处理加载失败的情况。

使用 setTimeout 或 setInterval

设置一个定时器,在指定的时间后执行相关代码或加载资源。

setTimeout(function() {
  // 执行延迟加载的代码或加载资源
}, 2000); // 在 2000 毫秒(2 秒)后执行

使用事件监听器

监听页面滚动、鼠标移动等事件,当事件触发时再执行相关代码或加载资源。

window.addEventListener('scroll', function() {
  // 执行延迟加载的代码或加载资源
});

使用 Intersection Observer

Intersection Observer API 可以观察元素是否进入视口,并在满足条件时执行相关代码或加载资源。

const observer = new IntersectionObserver(function(entries) {
  entries.forEach(function(entry) {
    if (entry.isIntersecting) {
      // 元素进入视口,执行延迟加载的代码或加载资源
      observer.unobserve(entry.target); // 停止观察该元素
    }
  });
});
 
const targetElement = document.querySelector('.target');
observer.observe(targetElement);