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

yizhihongxing

下面是关于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日

相关文章

  • javascript中常用编程知识

    下面我将为大家详细讲解JavaScript中常用编程知识的完整攻略。 一、变量 在JavaScript中,我们可以使用var、let和const关键字来声明变量。 1. var 使用var声明的变量具有全局或函数作用域。例如: var x = 10; function foo() { var y = 20; console.log(x); // 输出10 c…

    JavaScript 2023年5月27日
    00
  • ajax请求乱码的解决方法(中文乱码)

    当我们进行Ajax请求,出现中文乱码的情况时,需要进行如下处理。 1. 发送请求时指定编码方式 可以在发送Ajax请求时指定请求头中的Content-Type属性来指定编码方式为UTF-8。示例代码如下: var xhr = new XMLHttpRequest(); xhr.open(‘GET’, ‘/api/data’, true); xhr.setRe…

    JavaScript 2023年5月19日
    00
  • js将字符串转成正则表达式的实现方法

    让我来详细讲解一下“JS将字符串转成正则表达式的实现方法”的攻略。 使用RegExp构造函数 我们可以使用JavaScript中的RegExp构造函数将字符串转成正则表达式。RegExp对象是一个具有预定义属性和方法的内置JavaScript对象,它可以用来创建正则表达式对象。下面是一个例子: const patternString = ‘test’; //…

    JavaScript 2023年5月28日
    00
  • javascript中Object使用详解

    Javascript中Object使用详解 简介 在Javascript中,Object是所有类的根源,几乎所有的对象都是Object的实例,Object可以看做是Javascript中所有类中共有的属性和方法的集合。 在本文中,我们将详细介绍在Javascript中如何使用Object。 基本语法 创建Object有两种方式:使用Object构造函数或使用…

    JavaScript 2023年5月27日
    00
  • js中.sort()函数的常见用法与高级操作

    让我们来具体讲解一下 JavaScript 中数组的 .sort() 方法吧。 基本用法 .sort() 方法用于对数组进行排序,它可以带一个可选的排序函数作为参数,用于控制排序规则。 默认的排序规则是将元素转换成字符串后进行比较,然后按照 Unicode 码点排序。比如,对于以下数组: const arr = [10, 5, 8, 3, 2]; 如果我们调…

    JavaScript 2023年5月19日
    00
  • 在HTML中使用JavaScript的两种方法

    HTML是网页的基础语言,而JavaScript则是HTML中最常用的一种脚本语言之一。在HTML中使用JavaScript有两种方法:内部JavaScript和外部JavaScript。 内部JavaScript 内部JavaScript是指将JavaScript代码直接嵌入到HTML文档中,用<script>标签将其包围起来。 例如,下面的代…

    JavaScript 2023年5月18日
    00
  • 整理Javascript数组学习笔记

    下面是针对“整理JavaScript数组学习笔记”的攻略: 1. 了解JavaScript数组基础知识 JavaScript数组是一种用于存储多个值的有序集合。数组是一种特殊的变量类型,使用方括号([ ])来表示。在数组中的每个元素都有一个唯一的索引。数组的索引通常从0开始,第一个元素的索引为0. 示例1:如何创建一个数组 var fruits = [‘Ap…

    JavaScript 2023年5月27日
    00
  • 解析Javascript中大括号“{}”的多义性

    解析Javascript中大括号“{}”的多义性 大括号“{}”在Javascript中有多种含义,具体如下: 对象字面量 在Javascript中,大括号“{}”表示一个对象字面量。对象字面量是一种对象的表示方法,通过大括号{ }来包含一个或多个键值对。键值对中间使用“:”分隔,键值对之间使用“,”分隔。 示例: let obj = { name: ‘To…

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