IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果 -> 正文阅读

[游戏开发]项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果

需求

初次打开项目的某个页面时,因为网络等原因,可能会导致包体积过大。

解决方案

准备工作(使用 gka 把 gif 转化成 svg)

需要借助 gka 这个工具。这个工具是一键快速图片优化、生成动画文件的。只需要全局安装,配合一些命令,即可将图片转成 canvas/css/svg 动画。
首先,让 UI 把 .gif 动图转换成一系列的图片,每张图片都表示此动画的单帧。然后通过命令gka <文件夹路径> -m true -t svg --minirate 0-20 -s,将动画的单帧合并成一张雪碧图,按一定的压缩比率进行压缩,最后生成 svg 格式的动画文件。
由于文章内容需要脱敏,下面放一个 gka 文档里的图。左边的表示 loading gif 的所有单帧,用 gka 工具后,能压缩成一张雪碧图合配套的 .css 文件,.html 文件为演示这个动画要如何使用。

生成的文件:
生成的文件

单帧 → svg / canvas 动效:
在这里插入图片描述

在项目中使用 svg 动画

首先,需要将 gka 生成的雪碧图和 css 文件,都放在项目的public文件夹下。这次我将雪碧图放在了public\img\loading-sprites.png,css 文件放在了public\static\css\loading.css下。并对 css 文件里的命名做了优化。

.loading-animation {
  width: 640px;
  height: 307px;
  background-image: url("/img/loading-sprites.png");
  background-repeat: no-repeat;
  animation-name: keyframes-loading;
  animation-duration: 2.88s;
  animation-delay: 0s;
  animation-iteration-count: infinite;
  animation-fill-mode: forwards;
  animation-timing-function: steps(1);
}

@keyframes keyframes-loading {
  0% {
    width: 640px;
    height: 307px;
    background-image: url("/img/loading-sprites.png");
  }
  
  1.39% {
    background-position: -640px 0px;
  }
  
  2.78% {
    background-position: -1280px 0px;
  }
  
  4.17% {
    background-position: -1920px 0px;
  }
  
  5.56% {
    background-position: -2560px 0px;
  }
  
  /* 此处省略了一些代码 */
  
  97.22% {
    background-position: -44800px 0px;
  }
  
  98.61%,
  100% {
    background-position: -45440px 0px;
  }
}

然后,在入口页 index.html 引入上面提到的 css 文件。
之后,参考 gka 生成的 .html 文件,在页面 body 下添加 svg 元素。让页面一打开,就展示出 loading 的效果,取代原来的白屏。可以通过 svg 标签的 style 属性,指定 width 的值,改变 svg 的大小。

<!DOCTYPE html>
<html lang="zh">
  <head>
    <!-- 此处省略了其他代码 -->
    <link rel="stylesheet" href="/static/css/loading.css">
  </head>
  <body>
   <div id="first-loading-wrap" style="display: flex; justify-content: center; align-items: center; height:96vh; z-index: 999;">
        <svg id="first-loading-svg" viewBox="0, 0, 640, 307" style="width: 320px">
            <foreignObject id="first-loading-foreignobject" width="640" height="307">
                <div id="first-loading-content" class="loading-animation"></div>
            </foreignObject>
        </svg>
    </div>
    <div id="app">
    </div>
    <!-- built files will be auto injected -->
    </body>
  </html>

最后,在路由的afterEach钩子函数里,移除 loading 效果相关的元素即可。

router.afterEach(to => {
  // 判断是否需要去除 loading 效果
  document.getElementById('first-loading-wrap')?.remove()
  document.getElementById('first-loading-svg')?.remove()
  document.getElementById('first-loading-foreignobject')?.remove()
  document.getElementById('first-loading-content')?.remove()
  // 省略其他逻辑
})
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:55:11  更:2022-07-17 16:55:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:55:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码