当前位置:首页 > 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
分享给朋友:

相关文章

vue实现懒加载的方法

vue实现懒加载的方法

Vue 实现懒加载的方法 路由懒加载 通过动态导入语法拆分路由组件,减少初始加载时间。适用于 Vue Router 配置: const routes = [ { path: '/home…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…