h5实现加载100%过程中同时加载静态资源的效果

16 篇文章 0 订阅

子组件 : nbLoading 文件:

<template>
  <div class="nb-loading">
    <div class="nb-loading-process">
      <div class="process">
        <img src="@/common/images/1-3@2x.png" />
        <span>{{ process }}%</span>
      </div>
      <div class="desc">加载中,敬请期待…</div>
    </div>
  </div>
</template>

  props:{
    process:{
      type:[Number ,String],
      default:0
    }
  },
  watch: {
  // 如果val为100代表加载成功
    process(val) {
      if ( Number(val)  === 100) {
        this.$emit('success');
      }
    }
  },

父组件: Home文件

<div>
    <div class="page-list">
      <template v-for="item in config">
        <component
          :process="process"
        >
        </component>
      </template>
    </div>
    <div id="imglist" style="width:0;height:0;overflow:hidden;"></div>
</div>


import nbLoading from '@/components/nb-loading';
import { modeles2x } from '@/common/imageList.js';
  components: {
    nbLoading,……,……,……,
  },
  data() {return {
	  imagesList: modeles2x,
      imageCount: 0, // 图片数
      loadCount: 0,  // 已经加载的图片数?
      config: [
        {
          name: 'nb-loading',
          id: 0,
          logo
        },  ……………………],
        getData: 0,   // 页面数据一开始置为0,只有获取到数据之后才置为1
}}

  computed: {
    process() {
      if (!this.imageCount) return 0;
      let value = Math.floor((this.loadCount / this.imageCount) * 99);   // 图片加载完最多为 1*99=99
      return isNaN(value) ? 0 : value + this.getData;   // 再加上(确保必须是)等页面数据加载完后的数据  1+99=100
    }
  },
  created()  {
	this.query(); // 获取页面数据
},
  mounted() {
    this.hanlderLoading();  // 加载静态资源
  },
    methods: {
    query() {
      this.$api.getannualData().then((res) => {
        if (Object.keys(res.body)) {
          this.reportData = res.body;
          this.getData = 1;  // 只有获取数据之后才置为1 
        }
      });
    },
    hanlderLoading() {
      this.imageCount = this.imagesList.length;
      const _that = this;
      this.imagesList.forEach((element) => {
        const url = require('@/common/' + element + '.png');
        var img = document.createElement('img');
        img.style.background = `url(${url})`;
        document.getElementById('imglist').appendChild(img);
        img.src = url;
        img.onload = function() {
          _that.loadCount++;
        };
      });
    },
  }

imageList.js文件
// 处理图片 1/2/3倍图
在这里插入图片描述
在这里插入图片描述

const modulesFiles = require.context('./images', true, /\.png$/);
const modulesFiles2 = require.context('./imgs', true, /\.png$/);
const modules = [];
const modeles2x = [];
const modeles3x = [];
const pushFileName = (obj = {}, path) => {
  obj.keys().forEach((modulePath) => {
    const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1');
    if (RegExp(/@2x/).test(moduleName)) {
      modeles2x.push(path + moduleName);
    } else if (RegExp(/@3x/).test(moduleName)) {
      modeles3x.push(path + moduleName);
    } else {
      modules.push(path + moduleName);
    }
  });
};
pushFileName(modulesFiles, 'images/');
pushFileName(modulesFiles2, 'imgs/');
export { modules, modeles2x, modeles3x };

知识:
使用require.context实现前端工程自动化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化Web H5页面的首屏加载速度可以从以下几个方面入手: 1. 减少HTTP请求数量:减少页面的HTTP请求可以显著提高性能。可以通过合并CSS、JS文件、压缩图片等方式,减少HTTP请求数量。 2. 使用缓存:将静态资源(例如图片、CSS和JS等)缓存在本地,可以大幅度减少HTTP请求。可以通过设置HTTP响应头的缓存策略,让客户端缓存这些静态资源。 3. 压缩文件大小:减小HTML、CSS和JS文件的大小可以减少加载时间,提高性能。可以使用压缩工具压缩这些文件,减小文件大小。 4. 延迟加载:将不必要的资源(例如图片、视频等)延迟加载,可以减少页面的加载时间。可以使用LazyLoad等工具来实现延迟加载。 5. 预加载:将可能需要的资源(例如下一页的内容、用户可能要点击的按钮等)预加载到本地,可以提高用户体验。 6. 减少DOM操作:减少DOM操作可以减少页面的重绘和回流,提高性能。可以将多次DOM操作合并为一次操作,使用事件委托等方式来减少DOM操作。 7. 合理设置CSS和JS:将CSS和JS文件放在页面的头部,可以提高页面的加载速度。同时,可以将CSS和JS文件进行异步加载,以避免阻塞页面的加载。 总之,通过以上的方法可以优化Web H5页面的首屏加载速度,提高用户体验。需要根据实际页面的情况,综合考虑以上方面进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值