当前位置:首页 > JavaScript

js实现页面加载

2026-04-03 22:32:25JavaScript

页面加载的基本实现

使用原生JavaScript实现页面加载效果,可以通过监听DOMContentLoadedload事件来控制加载流程。DOMContentLoaded事件在HTML文档完全加载和解析后触发,无需等待样式表、图像等外部资源完成加载。load事件在所有资源(如图片、脚本)加载完成后触发。

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

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

显示加载动画

在页面加载过程中,可以显示一个加载动画,提升用户体验。通常会在页面顶部添加一个进度条或旋转图标,加载完成后隐藏。

// 显示加载动画
function showLoader() {
    document.getElementById('loader').style.display = 'block';
}

// 隐藏加载动画
function hideLoader() {
    document.getElementById('loader').style.display = 'none';
}

document.addEventListener('DOMContentLoaded', showLoader);
window.addEventListener('load', hideLoader);

对应的HTML结构:

<div id="loader" style="display: none;">加载中...</div>

动态加载内容

对于需要异步加载的内容,可以使用fetchXMLHttpRequest从服务器获取数据,并在数据加载完成后更新页面。

js实现页面加载

document.addEventListener('DOMContentLoaded', function() {
    fetch('https://api.example.com/data')
        .then(response => response.json())
        .then(data => {
            document.getElementById('content').innerHTML = data.content;
        })
        .catch(error => {
            console.error('加载数据失败:', error);
        });
});

延迟加载图片

为了提高页面加载速度,可以对图片进行延迟加载(Lazy Load),即当图片进入可视区域时才加载。

document.addEventListener('DOMContentLoaded', function() {
    const lazyImages = document.querySelectorAll('img[data-src]');

    const imageObserver = new IntersectionObserver((entries, observer) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.getAttribute('data-src');
                observer.unobserve(img);
            }
        });
    });

    lazyImages.forEach(img => {
        imageObserver.observe(img);
    });
});

对应的HTML结构:

js实现页面加载

<img data-src="image.jpg" alt="延迟加载的图片">

预加载关键资源

对于关键资源(如CSS、JavaScript或字体文件),可以使用<link rel="preload">提前加载,减少页面渲染时间。

<link rel="preload" href="styles.css" as="style">
<link rel="preload" href="script.js" as="script">

通过JavaScript动态预加载:

const preloadResource = (url, as) => {
    const link = document.createElement('link');
    link.rel = 'preload';
    link.href = url;
    link.as = as;
    document.head.appendChild(link);
};

preloadResource('styles.css', 'style');
preloadResource('script.js', 'script');

错误处理与重试机制

在加载资源时,可能会遇到网络问题或资源不可用的情况,可以通过错误处理和重试机制提高鲁棒性。

function loadResource(url, retries = 3, delay = 1000) {
    return new Promise((resolve, reject) => {
        const attempt = (remainingRetries) => {
            fetch(url)
                .then(response => {
                    if (!response.ok) throw new Error('加载失败');
                    resolve(response);
                })
                .catch(error => {
                    if (remainingRetries > 0) {
                        setTimeout(() => attempt(remainingRetries - 1), delay);
                    } else {
                        reject(error);
                    }
                });
        };
        attempt(retries);
    });
}

document.addEventListener('DOMContentLoaded', function() {
    loadResource('https://api.example.com/data')
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('最终加载失败:', error));
});

标签: 加载页面
分享给朋友:

相关文章

vue实现页面刻度

vue实现页面刻度

实现页面刻度的基本思路 在Vue中实现页面刻度通常涉及动态渲染刻度线、数值标签及交互逻辑。可通过CSS绝对定位结合Vue的数据绑定能力实现。以下是具体方法: 刻度组件结构 创建一个Vue组件(如Sc…

h5实现页面跳转页面

h5实现页面跳转页面

H5 实现页面跳转的方法 在 H5(HTML5)中,实现页面跳转可以通过多种方式完成,以下是常见的几种方法: 使用 <a> 标签 通过 HTML 的 <a> 标签实现页面跳转…

uniapp实现懒加载

uniapp实现懒加载

uniapp实现懒加载的方法 在uniapp中实现懒加载可以通过多种方式,以下是几种常见的方法: 使用uni.lazyLoad组件 uniapp提供了内置的懒加载组件,适用于图片等资源的懒加载。在页…

vue实现结算页面

vue实现结算页面

Vue 实现结算页面的方法 数据绑定与表单验证 使用 Vue 的 v-model 实现表单数据的双向绑定,确保用户输入的数据能够实时更新到 Vue 实例中。例如,绑定收货地址、支付方式等表单字段。…

vue实现引导页面

vue实现引导页面

实现引导页面的方法 在Vue中实现引导页面通常需要结合用户交互和页面跳转逻辑,以下是几种常见的实现方式: 使用路由守卫控制访问权限 在router.js中配置全局前置守卫,检查用户是否首次访问:…

vue 实现商品页面

vue 实现商品页面

实现商品页面的基本步骤 使用Vue.js实现商品页面需要结合组件化开发、数据绑定和路由等功能。以下是一个典型实现方案: 商品数据管理 商品数据通常存储在Vuex或Pinia状态管理中,也可以通过AP…