首页 > 其他分享 >如何实现图片预加载和加载进度条

如何实现图片预加载和加载进度条

时间:2023-09-24 13:00:24浏览次数:40  
标签:.. 进度条 加载 loadingProgress 图片 页面

很久没有发文了今天水一篇文章,图片预加载且展示加载的进度条,在现代的Web开发中,优化用户体验至关重要。一种常见的方法是在页面加载时预加载图片,并展示一个加载进度条,让用户了解加载进度。在本文中,我们将深入探讨如何实现这两个关键功能,以提高网站性能和用户满意度,首先谈一下我的思路:

创建一个函数用于new一个image对象,遍历需要预加载的图片数组,设置图片的src属性为传入的 URL,从而触发图片的加载,在每个图片加载成功后,用数组长度计算出百分比更新加载进度并将加载的图片添加到页面上,其中的我有一个我踩的坑需要注意一下

 

/**
 * 图片预加载
 */
export function preloadImage(url) {
    console.log(url)
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.src = url;

    img.onload = () => {
      resolve(img);
    };

    img.onerror = (err) => {
      reject(err);
    };
  });
}

创建了一个 preloadImage 函数,它用于加载给定 URL 的图像。该函数返回一个 Promise,使异步处理图图片加载的成功或失败。

        data() {
            return {
                loadingProgress: 0, // 图片加载进度
            };
        },
        methods: {
            // 预加载
            async preloadImages() {
                const imageUrls = [
                    require('../../static/index/hone-rainbow.png'),
                    require('../../static/index/hone-bg.png'),
//...你的图片
                ];
                const totalImages = imageUrls.length;
                let loadedImages = 0;

                for (const imageUrl of imageUrls) {
                    try {
                        await preloadImage(imageUrl);
                        loadedImages++;
                        this.loadingProgress = (loadedImages / totalImages) * 100; // 更新进度
                    } catch (error) {
                        console.error(error);
                    }
                }
                // 判断是否首次访问,开启新手指引
                this.$nextTick(() => {
                    this.access()
                });
            },
                    },

在 preloadImages 函数中,定义一个数组 imageUrls,其中包含所有需要预加载的 URL。然后,通过遍历这个数组,使用 preloadImage 函数来预加载每个图像。在每个图像加载成功后,更新加载进度并将加载的图像添加到页面上,在页面中我使用了加载进度条来展示加载进度。进度条的百分比由 this.loadingProgress 控制,它在每个图片成功加载后被更新。通过监听 loadingProgress 的变化可以实时更新进度条,还有就是根据需要通过 try-catch 捕获可能的加载错误,在this.$nextTick中进行加载完成后需要进行的操作,确保是在进度条完成后正常运行

    <!-- 预加载页面 -->
    <view v-if="loadingProgress!==100" class="loading-main">
        <view class="loading-line-progress-box">
            <view class="loading-line-progress">
                <u-line-progress width="100" height="20" :percentage="loadingProgress" activeColor="#f9a431">
                    <text class="loading-u-percentage-slot">{{(loadingProgress || 0).toFixed(2)}}%</text>
                    <image v-if="loadingProgress!==0" class="loading-line-progress-logo"
                        src="@/static/index/line-progress-logo.png" mode=""></image>
                </u-line-progress>
            </view>
        </view>
    </view>
    <!-- 主页面 -->
    <view v-else class="content-main">
//加载完成后的页面
    </view>

html的话我这边使用的是uview的进度条组件,这里可以根据自己项目的需要进行调整,当图片加载完毕loadingProgress为一百时进度条页面消失展示主页

接下来记录一下我做这个功能踩的坑

const imageUrls = [
                    '../../static/index/hone-rainbow.png',
                    '../../static/index/hone-bg.png',
                ];

刚开始时我是直接写图片的相对路径,预加载出来的图片当然就是相对路径了,可是图片经过uniapp编译后不仅路径进行了改变,且会添加hash后缀防重名,如此一来之前预加载的图片当进入页面时肯定是用不了的浏览器会重新加载一次图片,这里就有两个方法解决,第一将图片放服务器中进行预加载同时可以减少前端打包的体积,第二种就是就是通过require包裹始终获取图片的真实路径,我这边项目体积并没有很大所以采用了第二种方法始终获取图片的真实路径,webpack构建工具负责将这些引用路径解析为真实的文件路径,因此可以专注于编写相对路径,不必担心最终的部署路径。

标签:..,进度条,加载,loadingProgress,图片,页面
From: https://www.cnblogs.com/dengsir39/p/17725860.html

相关文章

  • python生成图片验证码的demo
    下面是一个使用Python生成图片验证码的简单示例:fromPILimportImage,ImageDraw,ImageFontimportrandomdefgenerate_captcha(text,width,height,font_path,font_size):#创建一个空白图片image=Image.new('RGB',(width,height),(255,255,255))dr......
  • 说说 Java 类加载机制是什么
    加载,获取类的字节码,并且放到jvm的元空间中,生成Class对象链接验证:验证字节码是否符合jvm的规范,是否安全等准备:将静态变量赋默认值(不是自己的默认值,而是int是0这种)解析:将符号引用转为直接引用初始化:将静态变量赋初始值(自己写的初始值),执行静态代码块使用卸载:将Class对象清......
  • 管理系统加载页面的实现
    1、页面回顾2、功能设置将进度条重命名为MyProgress:在工具箱中找到一个计时器Timer,拖动到加载页面中,然后双击计时器:进入到编码界面;if判断语句:之后更改%的Name值:为了将数字变化表现在加载界面上:所以加上这么一句话:之后,在加载界面双击背景,进入到界面的编码界面:加上......
  • 用户登录~生成图片验证码(identify(生成图片验证码)插件)
    1.效果图:2.以用户登录实现生成图片验证功能:使用identify(生成图片验证码)插件identify:这是一个vue的插件,使用canvas来生成图形验证码2.1下载identify插件,npm安装 npmiidentify2.2具体参数如下:2.2在components目录新建一个SIdentify.vue,把以下代码复制进去!<tem......
  • 用户加载界面设计--基于C#和Visual Studio2019
    1、设定窗体位置为屏幕中心、修改窗体为无边框形式修改右下角的这里:修改为(屏幕中心打开):修改右下角这里:修改为(无边框形式):然后再调整修改页的大小(自由拉伸即可):之后调整边框背景颜色:为窗体重命名:2、打开工具箱,拖出一个Label标签在这里可以修改Label的字体样式:设置......
  • uniapp上拉加载更多
    <template><viewclass="container"><viewv-for="(item,index)invideoList":key="index"><labelstyle="display:block;width:100%;height:40px;background-color:saddlebrow......
  • 想知道如何去图片水印?这几个方法助力你
    如何去图片水印?有没有铁子跟我一样。每天都会在互联网冲浪吃瓜!时间一长难免会刷到一些符合自己喜好的配图或者喜欢的头像图片,配图会想着保存后和朋友分享,头像会想着自己使用。而大多数情况下保存后的图片会有各种各样的水印,那么应如何去图片水印呢?其实我们可以借助一些去图片水印工......
  • 请问为什么加载标签文字的时候,导致页面上出现卡顿?
    加载标签文字导致页面卡顿的问题可能与多种因素有关。这些因素可能包括页面结构、网络请求、浏览器性能、脚本执行等。以下是一些可能导致页面卡顿的原因以及解决方法:大量DOM元素:如果页面包含大量的DOM元素,加载和渲染这些元素可能导致页面卡顿。解决方法包括减少DOM元素数量,使用虚......
  • 中文图形验证码 动态图形验证码 图片验证码 验证码【加逻辑思路解析】
    效果: 逻辑:生成数字随机数,再改为中文表示,返给前端。人为输入阿拉伯数字。(后端缓存中存入用户信息和随机数。做校验。)主要测试code:Randomrm=newRandom();Stringstrcode=Integer.toString(rm.nextInt(900000)+100000);System.out.println("生成......
  • webman:自动加载(v1.5.7)
    一,官方文档地址:https://www.workerman.net/doc/webman/others/autoload.html二,实际操作1,设置目录:在项目根目录下新建目录extend:修改composer.json增加以下代码:"psr-0":{    "":"extend/"}如图:执行dumpautoloadliuhongdi@lhdpc:/data/webman/image......