javascript实现一个网页加载进度loading

下面是关于Javascript实现一个网页加载进度loading的完整攻略。

步骤一:添加HTML结构

首先,在网页的HTML结构中添加loading元素,用于显示进度条和加载状态。可以采用下面代码模板:

<div id="loading">
  <div id="progress"></div>
  <div id="message">Loading...</div>
</div>

其中,id为progress的div元素将被用来表示进度条,id为message的div元素将用来展示loading状态。

步骤二:添加CSS样式

为了让loading元素在屏幕中央展示,需要在CSS样式中定义loading元素的位置和样式。可以采用下面代码模板:

#loading {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  z-index: 1000;
}

#progress {
  width: 0%;
  background-color: #007bff;
  height: 5px;
  transition: width 0.3s ease-in-out;
}

#message {
  margin-top: 10px;
  font-size: 14px;
  color: #007bff;
}

其中,#loading样式用来设置loading元素的位置和排列方式,#progress样式用来设置进度条的颜色和过渡效果,#message样式用来设置loading状态的字体大小和颜色。

步骤三:添加Javascript代码

在页面加载时,通过Javascript代码计算已加载的资源量与总资源量之比来更新已完成的进度。可以采用下面的代码实现:

document.onreadystatechange = function () {
  if (document.readyState === "complete") {
    setTimeout(function () {
      document.getElementById("loading").style.opacity = "0";
    }, 1000);
  }
};

var count = 0;
var total = document.getElementsByTagName("html")[0].getElementsByTagName("*").length;

function showProgress() {
  count++;
  var percent = Math.ceil((count / total) * 100);
  document.getElementById("progress").style.width = percent + "%";

  if (count === total) {
    setTimeout(function () {
      document.getElementById("loading").style.opacity = "0";
    }, 1000);
  }
}

var images = document.getElementsByTagName("img");
for (var i = 0; i < images.length; i++) {
  images[i].addEventListener("load", showProgress, false);
}

其中,document.onreadystatechange事件监听页面加载状态,当页面完成加载后,通过setTimeout()函数将loading元素的透明度设置为0,从而实现隐藏loading元素的效果。

count变量表示已加载资源的数量,total变量表示所有资源的总数。showProgress函数在每次资源加载完成后被调用,计算已加载的资源量与总资源量之比,并更新进度条的显示。

代码中最后一段实现对所有图片资源的监听,当其中的一张图片加载完成后就会调用showProgress()函数来更新进度条。同样需要注意的是,在使用图片时,需要等图片完全加载后才能正确计算进度条宽度。

示例说明

示例一:应用于SPA单页应用

可以通过如下示例演示:

// 1. 在router.beforeEach函数中启用loading
router.beforeEach((to, from, next) => {
  document.getElementById("loading").style.opacity = "1";
  next();
});

// 2. 在router.afterEach函数中禁用loading
router.afterEach((to, from) => {
  document.getElementById("loading").style.opacity = "0";
});

在单页应用中,为了提高用户体验,通常在路由切换时启用loading元素,显示进度条和加载状态,当路由切换完成时,禁用loading元素。

示例二:应用于图片预加载

可以通过如下示例演示:

var images = [
  "https://www.example.com/image1.jpg",
  "https://www.example.com/image2.jpg",
  "https://www.example.com/image3.jpg",
];

var count = 0;
var total = images.length;

function preloadImages() {
  for (var i = 0; i < images.length; i++) {
    var img = new Image();
    img.onload = showProgress;
    img.src = images[i];
  }
}

function showProgress() {
  count++;
  var percent = Math.ceil((count / total) * 100);
  document.getElementById("progress").style.width = percent + "%";

  if (count === total) {
    setTimeout(function () {
      document.getElementById("loading").style.opacity = "0";
    }, 1000);
  }
}

preloadImages();

在预加载图片时,可以通过如上代码计算已加载的图片数量与总图片数量之比,并更新进度条的宽度。当所有图片加载完成时,隐藏loading元素。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript实现一个网页加载进度loading - Python技术站

(1)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS异步编程之generator与async/await语法糖详解

    JS异步编程之generator与async/await语法糖详解 什么是异步编程? 通俗地讲,异步编程是指不需要等待上一个代码块执行完毕,就可以开始执行下一个代码块的编程方式。在JavaScript中,异步编程是常见的编程方式,它主要使用回调函数、Promise、Generator和async/await等语法来实现。其中,Generator和async/…

    JavaScript 2023年5月28日
    00
  • python实现斗地主分牌洗牌

    让我来为你详细讲解如何使用 Python 实现斗地主的牌局分配和洗牌。 准备工作 为了实现斗地主案例,你需要安装 Python 并且了解 Python 基础语法的使用。此外还需用到 Python 自带的 random 模块。 实现分配牌 首先我们需要生成一副有 54 张牌的扑克牌,并将其打乱顺序。在 Python 中,可以通过创建一个包含所有扑克牌的列表来实…

    JavaScript 2023年5月28日
    00
  • JavaScript 映射器 array.flatMap()

    JavaScript的映射器array.flatMap()方法可以将一个数组的每个元素映射到另一个数组中,然后将所有的映射结果压缩成一个新数组。这个方法适用于一些场景,例如需要从一个二维数组中提取子数组元素,或者想要将多个数组合并成一个新的数组。下面是详细的攻略: 1. 语法 array.flatMap(callback(currentValue[, ind…

    JavaScript 2023年5月27日
    00
  • 深入理解react-router 路由的实现原理

    下面是深入理解react-router路由的实现原理的攻略。 1. 路由的概念 路由是指通过URL来定位到特定的页面并展示给用户的过程。在前端 SPA(单页应用)中,我们通常使用第三方库来实现路由功能,其中react-router是使用较为广泛的一种。 2. react-router的实现原理 首先,我们需要了解react-router的实现原理是基于his…

    JavaScript 2023年6月11日
    00
  • 详解原生JavaScript实现jQuery中AJAX处理的方法

    以下是我对“详解原生JavaScript实现jQuery中AJAX处理的方法”的完整攻略: 什么是AJAX AJAX是Asynchronous JavaScript and XML的缩写,是一种通过JavaScript发送异步HTTP请求进行数据交互的技术。 原生JavaScript实现AJAX XMLHTTPRequest 在原生JavaScript中使用…

    JavaScript 2023年6月11日
    00
  • json格式化/压缩工具 Chrome插件扩展版

    下面是关于“json格式化/压缩工具 Chrome插件扩展版”的详细攻略。 什么是json格式化/压缩工具 Chrome插件扩展版? JSON格式化/压缩工具是一款Chrome浏览器插件扩展。它可以将json格式的数据进行格式化或压缩,方便展示和阅读,在前端开发中有着广泛的应用。 安装和使用 步骤一:下载并安装插件 首先,我们需要在Chrome网上应用商店中…

    JavaScript 2023年5月27日
    00
  • JS实现的Object数组去重功能示例【数组成员为Object对象】

    下面是讲解“JS实现的Object数组去重功能示例【数组成员为Object对象】”的完整攻略。 一、背景介绍 在实际的开发过程中,我们经常会操作Object数组。而有时候,我们需要对一个Object数组进行去重操作,以避免出现重复数据。接下来,我们将会介绍针对这种情况下的JS实现的Object数组去重功能示例。 二、数组去重算法 去重算法是数组去重的核心,根…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript时间处理之几个月前或几个月后的指定日期

    详解JavaScript时间处理之几个月前或几个月后的指定日期 在 JavaScript 中,我们常常需要对日期进行计算和处理,在实际业务开发中经常会遇到需要计算几个月前或几个月后的日期的需求。本篇文章将详细介绍怎样在 JavaScript 中实现这个功能。 1. 思路分析 为了计算 X 个月前或 X 个月后的日期,我们可以先将指定日期转换为时间戳,然后进行…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部