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日

相关文章

  • vsCode中配置setings.json的技巧

    下面我将为大家详细讲解在vsCode中配置settings.json文件的技巧。 什么是settings.json settings.json是vsCode中的一个配置文件。它可以用来修改vsCode的各种设置。 在哪里找到settings.json 要找到settings.json,可以打开vsCode的“用户设置”页面。在页面右上角菜单中选择“设置”,再…

    JavaScript 2023年6月11日
    00
  • 学习JavaScript设计模式之状态模式

    以下是详细的攻略: 学习JavaScript设计模式之状态模式 状态模式是什么? 状态模式是一种行为型设计模式,它允许对象在其内部状态更改时更改其行为。这个模式的主要想法是通过创建有限状态机来满足状态相关行为的需要。 状态模式的优点? 优化大型、复杂代码的结构。 减少了 if 语句的使用,使得代码更加简洁。 更好的可扩展性,可以方便地增加、删除或修改状态,而…

    JavaScript 2023年5月28日
    00
  • JavaScript表单验证的两种实现方法

    下面是详细讲解JavaScript表单验证的两种实现方法的攻略。 一、方法一:使用HTML5表单验证 在HTML5中,可以使用一些input标签的属性进行简单的表单验证。 1. 必填项验证 首先介绍一个必填项验证的属性,即required属性。将该属性设置在input标签中,可以让表单中的该输入框变为必填项。 示例代码: <form> <l…

    JavaScript 2023年6月10日
    00
  • 为什么要使用 Rust 语言、Rust 语言有什么优势

    为什么要使用 Rust 语言、Rust 语言有什么优势 1. 什么是 Rust 语言? Rust 是一种多范式系统编程语言,旨在提供可靠的内存安全和高性能 abstractions 的开发体验。特别是,它解决了传统 C 和 C++ 语言中的一些缺陷,如空指针、缓冲区溢出等,同时通过所有权机制解决了内存安全问题。Rust 是 Mozilla Foundatio…

    JavaScript 2023年5月28日
    00
  • JS数据类型STRING使用实例解析

    关于“JS数据类型STRING使用实例解析”的攻略,我可以为你提供以下内容。 什么是JS中的字符串(STRING)类型? 字符串是JS中最常用的一种数据类型,用于表示文本,由一系列Unicode字符组成。在JS中,字符串以单引号、双引号或反引号 包裹起来,这三种方式是等价的。 比如: // 使用单引号包括字符串 let str1 = ‘Hello World…

    JavaScript 2023年5月28日
    00
  • js 定时器setTimeout无法调用局部变量的解决办法

    当我们在js代码中定义了局部变量,如果要在定时器setTimeout中使用该变量,可能会出现无法调用的情况。这是因为定时器是基于全局变量执行的,而局部变量只能在定义它的函数中使用。 为了解决这个问题,我们可以采用以下两种方法: 方法一:使用闭包 我们可以通过将变量封装在一个函数内部,并返回一个函数的方式创建一个闭包,使得该变量可以被定时器正确调用。以下是一个…

    JavaScript 2023年6月11日
    00
  • Javascript Object对象类型使用详解

    Javascript Object对象类型使用详解 在 Javascript 中,Object 对象类型是最重要的类型之一。它是一种可以容纳各种数据类型的复合类型,用于表示对象实体或无序集合。在本文中,我们将详细讲解 Object 对象类型的各个方面,包括创建、读写属性、遍历、方法和继承等。 创建 Object 对象 使用 Object 构造函数或对象字面量…

    JavaScript 2023年5月27日
    00
  • element中form组件prop嵌套属性的问题解决

    当我们在使用element组件库的form组件进行表单处理时,可能会遇到prop属性中需要嵌套传递另一个属性值的情况。比如,我们需要将一个表单项的验证规则(rules)传递给另外一个表单项,例如两个密码输入框输入必须相同。 以下是解决此类问题的攻略: 步骤一:在模板中添加ref属性 在模板中,我们需要添加一个ref属性来标识这个表单项,这样我们在代码中就可以…

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