当前位置: 首页 > article >正文

都2024了,还在为uniapp的app端tabbar页面闪烁闪白而发愁吗

前言

本文记于2024-8-30,本人在网上寻找uniapp的app端tabbar页面闪烁闪白相关文章时,可谓是搜遍看遍试遍,当然也是完全徒劳,不能说网上现存的文章完全无用吧,那也是你copy我我copy你,一点意思没有。在不断思考之后,突然灵机一动,于是乎便有了该文章。

概要

本文主要为uniapp的app端tabbar页面在切换另一个未缓存的tabbar页面时会发生闪白闪烁。这个根本原因是app端可以理解为多页面,你不去点击下一个tabbar页面,是不会去渲染的。但是渲染又要时间,就会存留这一瞬间的渲染间隙。

有人问:不是有预加载吗,把tabbar页面全都预加载一遍不就行了吗;
或者说tabbar页面不是有缓存吗,我直接开局先把所有tabbar页面加载一遍不就欧了。

但是我相信看到这篇文章的小伙伴们也正是因为此番操作无果,或者各种报错,不能连续跳转页面啊,又或是全部加载一遍的话启动太慢了等等,才来尝试本文章提供的思路的。

思路

给根节点(也就是html节点)上底色。
一句话,很简单,但是也很难。如果是纯暗色系app,那你直接写死一个合适的暗色底色就行了。
不过如果你的app是可以黑白切换的,如果你写死黑色底色,那么白主题就是闪黑了。

有人问:那我想办法给html动态设置底色不就行了。

想法很好,但是你自己慢慢试错得踩遍坑,因为你给底色设成css或者sass变量也好,还是什么其他的也罢,你会发现永远都会慢一步,慢这渲染html根节点的一步,导致还是闪烁。这里我就直接上方案了

方案

  1. 通过媒体查询,给暗夜模式上底色
// App.vue 文件

<style>
// 这里只用写暗黑模式,因为默认就是白底
// 这里的dark就是主题色变量,只支持light,dark,auto(auto我们忽视掉)
@media (prefers-color-scheme: dark) {
  html {
    background: #141414; // 适合你的暗夜模式的底色
  }
}
</style>
  1. 切换dark还是light
    跟随你的主题变量设置 prefers-color-scheme
// 这里需要监听的theme变量应该不用我多说,大家在做主题切换时肯定会有个代表当前处于什么主题的标志变量,
// 我是将这个变量存在pinia并且持久化的,所以此处我通过监听该变量即可
computed: {
  theme() {
    return useSysStore().getTheme()
  }
},

// 可以用条件编译来指定下列代码仅在app端执行
// #ifdef APP-PLUS
watch: {
  // 这里我对我定义的主题标志进行监听
  // 调用 html5+的api,可以给prefers-color-scheme设置模式
  // 详见:https://www.html5plus.org/doc/zh_cn/nativeui.html
  theme(newVal) {
    plus.nativeUI.setUIStyle(newVal)
  }
},
// #endif

该思路我只在我自己的安卓机子上实测了也成功了,我不能保证所有机型都适配,而且我木有苹果手机,自然也测不了ios设备

题外话

既然都做完自定义的主题切换了,怎么在根节点添加类或者自定义属性用作主题标识(使用renderjs或者wxs)的方法应该不用在此文章讲解说明了。该文章也仅提供如此一思路去实现使用媒体查询的形式动态给根节点上底色而已。

全网我搜罗很久都没见到有这种思路的分享,如若转载请注明我原文章原作者

希望本文能帮你节省很多时间,网上的文章抄来抄去的太多了。如果本文没能帮到你也请直接略过

效果预览

实现前:

tabbar页面闪烁闪白

实现后:

tabbar页面解决闪烁闪白问题


http://www.kler.cn/news/283643.html

相关文章:

  • AI:引领未来的科技浪潮
  • 基于vue框架的餐馆管理系统jo0i7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 解决Vite+Vue3打包项目本地运行html白屏和报错问题
  • 【iOS】Masonry学习
  • EasyCode实现完整CRUD + 分页封装
  • RateLimiter超时
  • Memcached stats items 命令
  • JVM运行时数据区详解
  • 全球视角下的AI应用:国内外技术与实践的比较分析
  • 了解一下 CSS 的了解font-variant-alternates属性
  • TCP/IP和SNMP
  • matlab峰值检测
  • HTML静态网页成品作业(HTML+CSS+JS)——迪士尼公主介绍(6个页面)
  • sql server导入mysql,使用python多线程
  • 从blob 下载zip文件到本地并解压
  • 罗德与施瓦茨RS、UPV 音频分析仪 250KHZ 双通道分析仪UPL
  • 【面试经验】字节产品经理二面面经
  • MySQL空间函数ST_Distance_Sphere()的使用
  • Mysql-redo logs,binlog以及undo logs的作用及区别
  • 对mozjpeg中的函数名进行替换
  • 详解Spring AOP
  • 简单的Tcp服务器
  • 【香橙派系列教程】(十六) 语音模块与阿里云结合
  • Kafka日志及常见问题
  • x-cmd mod | x scoop - Windows 开源包管理工具
  • Java、python、php版 美发美甲预约服务平台 美容院管理系统(源码、调试、LW、开题、PPT)
  • 安卓15发布日期确定,安卓15 谷歌GMS认证截止日期有重大变化!安卓版本GMS认证截止时间更新,谷歌GMS认证之MADA/EDLA设备认证截止时间介绍
  • CSS 的文字平滑属性font-smooth
  • C++研发笔记1——github注册文档
  • C++类和对象(5)——运算符重载(以日期类为例)