当前位置:首页 > JavaScript

等待加载 js 实现

2026-04-04 02:56:16JavaScript

实现等待加载的 JavaScript 方法

方法一:使用 window.onload 事件

window.onload = function() {
    // 页面完全加载后执行的操作
    console.log('所有资源加载完成');
};

方法二:使用 DOMContentLoaded 事件

document.addEventListener('DOMContentLoaded', function() {
    // DOM 结构加载完成后执行的操作
    console.log('DOM 加载完成');
});

方法三:动态检测元素存在

等待加载 js 实现

function waitForElement(selector, callback) {
    const element = document.querySelector(selector);
    if (element) {
        callback(element);
    } else {
        setTimeout(() => waitForElement(selector, callback), 100);
    }
}

waitForElement('#targetElement', function(el) {
    console.log('目标元素已加载', el);
});

方法四:Promise 结合 MutationObserver

function elementReady(selector) {
    return new Promise((resolve) => {
        const el = document.querySelector(selector);
        if (el) return resolve(el);

        const observer = new MutationObserver(() => {
            const el = document.querySelector(selector);
            if (el) {
                observer.disconnect();
                resolve(el);
            }
        });

        observer.observe(document.documentElement, {
            childList: true,
            subtree: true
        });
    });
}

elementReady('.dynamic-content').then(el => {
    console.log('动态内容已加载', el);
});

加载动画实现示例

基础加载动画

等待加载 js 实现

function showLoader() {
    document.body.insertAdjacentHTML('beforeend', `
        <div id="loader" style="
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.7);
            display: flex;
            justify-content: center;
            align-items: center;
            z-index: 9999;
        ">
            <div class="spinner"></div>
        </div>
    `);
}

function hideLoader() {
    const loader = document.getElementById('loader');
    if (loader) loader.remove();
}

// 使用示例
showLoader();
window.addEventListener('load', hideLoader);

CSS 旋转动画

.spinner {
    width: 40px;
    height: 40px;
    border: 4px solid #f3f3f3;
    border-top: 4px solid #3498db;
    border-radius: 50%;
    animation: spin 1s linear infinite;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

异步资源加载检测

检测图片加载

function loadImage(url) {
    return new Promise((resolve, reject) => {
        const img = new Image();
        img.onload = () => resolve(img);
        img.onerror = reject;
        img.src = url;
    });
}

loadImage('example.jpg')
    .then(img => document.body.appendChild(img))
    .catch(() => console.error('图片加载失败'));

检测脚本加载

function loadScript(url) {
    return new Promise((resolve, reject) => {
        const script = document.createElement('script');
        script.src = url;
        script.onload = resolve;
        script.onerror = reject;
        document.head.appendChild(script);
    });
}

loadScript('https://example.com/plugin.js')
    .then(() => console.log('脚本加载成功'))
    .catch(() => console.error('脚本加载失败'));

这些方法可以根据不同场景选择使用,从简单的页面加载事件到复杂的动态元素检测都能覆盖。对于现代Web应用,推荐使用Promise和MutationObserver的组合方案,它们提供了更精细的控制能力。

标签: 加载js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现刷新页面

js实现刷新页面

刷新页面的方法 在JavaScript中,可以通过多种方式实现页面刷新。以下是几种常见的方法: 使用 location.reload() 调用 location.reload() 方法可以重新加载当…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…