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日

相关文章

  • javascript比较两个日期相差天数的方法

    对于JavaScript来说,比较两个日期相差天数的方法可以使用以下两种方式: 方式一:使用Date对象获取时间戳进行计算 我们可以将两个日期转化为时间戳,然后计算它们之间相差的毫秒数,最后再将毫秒数换算成天数。 /** * 计算两个日期相差的天数 * @param {string} date1 日期1,格式为 yyyy-mm-dd * @param {st…

    JavaScript 2023年5月28日
    00
  • JavaScript实现动态网页时钟

    下面我来详细讲解一下如何用JavaScript实现动态网页时钟的完整攻略。 1. HTML结构 首先,我们需要在HTML文件中添加一个容器来显示时钟,例如: <div id="clock"></div> 我们也可以添加一些样式来美化时钟: #clock{ font-size: 50px; font-weight: …

    JavaScript 2023年5月27日
    00
  • javascript格式化json显示实例分析

    接下来我将为你详细讲解“JavaScript格式化JSON显示实例分析”的完整攻略。 什么是JSON JSON是JavaScript Object Notation的缩写,是一种轻量级的数据交换格式。JSON使用文本来描述数据对象,与XML不同,JSON更容易阅读、编写、解析,因为它的语法格式比XML更简洁。 格式化JSON 在处理JSON格式的数据时,我们…

    JavaScript 2023年5月27日
    00
  • jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题

    在IE6、7、8中,无法使用原生的JSON.stringify函数,因此如果需要将JavaScript对象转化为JSON字符串,我们需要使用jQuery中的$.parseJSON和$.stringify方法。 下面是解决方案的完整攻略: 引入jQuery库 在或中引入jQuery库: <!DOCTYPE html> <html> &l…

    JavaScript 2023年5月27日
    00
  • JavaScript设计模式之单例模式实例

    JavaScript设计模式之单例模式实例 什么是单例模式 单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供对该实例的全局访问点。 在JavaScript中,单例模式可以通过类的静态属性或闭包来实现。下面我们会用两个例子来说明。 静态属性实现 在这个例子中,我们定义一个Singleton类,使用类的静态属性来实现单例模式。 class Sin…

    JavaScript 2023年6月10日
    00
  • JS中的回调函数实例浅析

    JS中的回调函数实例浅析 什么是回调函数 回调函数是一种在函数执行完毕后,将另一个函数作为参数传递给它,并在后者执行的函数。它的特点是:回调函数是作为参数传递给另一个函数的,当另一个函数执行完毕后,回调函数才会被执行。 回调函数通常用于异步编程中,由于JavaScript是单线程的,异步调用的函数执行完毕后需要得到回调函数的执行结果,以便继续执行后续的代码。…

    JavaScript 2023年5月28日
    00
  • js调试工具console.log()方法查看js代码的执行情况

    当我们编写复杂的JavaScript代码时,难免会出现各种错误和异常,这时候需要一些有效的工具来帮助我们进行调试。其中一个非常重要的工具就是 console.log() 方法。 什么是 console.log() 方法? console.log() 方法是 JavaScript 调试的常见方式之一,它在控制台输出一个指定的字符串,可以帮助我们跟踪代码执行过程…

    JavaScript 2023年5月28日
    00
  • JavaScript立即执行函数用法解析

    JavaScript中的立即执行函数是指在定义后立即执行的函数。它的语法是使用函数表达式或函数声明的方式定义一个函数,然后紧接着使用括号将其包起来,并在后面添加括号,如下: // 函数表达式方式 (function() { // 立即执行的代码 })(); // 函数声明方式 (function foo() { // 立即执行的代码 })(); 这种立即执行…

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