当前位置:首页 > JavaScript

js 实现 defer

2026-01-31 20:11:53JavaScript

在 JavaScript 中,defer 是一种脚本加载属性,用于延迟脚本的执行,直到 HTML 文档解析完成。以下是几种实现 defer 效果的方法:

使用 defer 属性

在 HTML 中直接为 <script> 标签添加 defer 属性,浏览器会异步加载脚本但延迟执行,直到 DOM 解析完成。

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

动态加载脚本

通过 JavaScript 动态创建 <script> 标签并设置 defer 属性,实现延迟加载。

const script = document.createElement('script');
script.src = 'script.js';
script.defer = true;
document.head.appendChild(script);

监听 DOMContentLoaded 事件

将脚本逻辑包装在 DOMContentLoaded 事件监听器中,确保脚本在 DOM 解析完成后执行。

document.addEventListener('DOMContentLoaded', function() {
    // 脚本逻辑
});

使用 asyncPromise

结合 asyncPromise 实现类似 defer 的效果,确保脚本在 DOM 准备好后执行。

async function loadDeferredScript() {
    await new Promise(resolve => {
        if (document.readyState === 'complete') {
            resolve();
        } else {
            document.addEventListener('DOMContentLoaded', resolve);
        }
    });
    // 脚本逻辑
}
loadDeferredScript();

模块化加载

使用 ES6 模块的 import 语法,模块默认具有 defer 行为。

js 实现 defer

<script type="module" src="module.js"></script>

注意事项

  • defer 仅适用于外部脚本(带有 src 属性的 <script> 标签)。
  • 多个 defer 脚本会按顺序执行,而 async 脚本执行顺序不确定。
  • 动态创建的脚本默认是异步的,需显式设置 defer 或通过事件控制执行时机。

标签: jsdefer
分享给朋友:

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…