为了解决小程序tabbar闪烁的问题,我将小程序重构成了 SPA

这篇具有很好参考价值的文章主要介绍了为了解决小程序tabbar闪烁的问题,我将小程序重构成了 SPA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序自定义tabbar跳转闪烁,小程序,javascript

(日落西山,每次看到此景,我总是会想到明朝(明朝那些事儿第六部的标题,日落西山))

目录

前言

官网自定义tabbar

猜测bug产生原因

解决闪烁问题

写在最后


前言


几个月前,因工作需求,我开发了一个小程序,当时遇到了一个需求,是关于tabbar权限的问题。小程序的用户分两种,普通用户和vip用户,普通用户tabbar有两个,vip用户小程序下面的tabbar有五个。  
因为涉及自定义tabbar的问题,所以官方自带的tabbar肯定就不能用了,我们需要自定义tabbar。官方也提供了自定义tabbar的功能。

官网自定义tabbar

官网地址:基础能力 / 自定义 tabBar (qq.com)

{
  "tabBar": {
    "custom": true,
    "list": []
  }
}

就是需要在 app.json 中的 tabBar 项指定 custom 字段,需要注意的是 list 字段也需要存在。

然后,在代码根目录下添加入口文件:

custom-tab-bar/index.js
custom-tab-bar/index.json
custom-tab-bar/index.wxml
custom-tab-bar/index.wxss

具体代码,大家可以参考官网案例。

需要注意的是每个tabbar页面 / 组件都需要在onshow / show 函数中执行以下函数,否则就会出现tabbar按钮切换两次,才会变成选中色的问题。

      if (typeof this.getTabBar === 'function' &&
        this.getTabBar()) {
        this.getTabBar().setData({
          selected: 0     // 第n个tabbar页面就填 n-1
        })
      }

接下来就是我的思路

小程序自定义tabbar跳转闪烁,小程序,javascript

我在 custom-tab-bar/index.js 中定义了一个函数,这个函数去判断当前登录人是否为vip,如果是就替换掉tabbar 的数据。

那么之前每个页面的代码就要写成这样

      if (typeof this.getTabBar === 'function' &&
        this.getTabBar()) {
        this.getTabBar().change_tabbar_list()
        this.getTabBar().setData({
          selected: 0   // 第n个tabbar页面就填 n-1
        })
      }

ok,我们来看一下效果。注意看视频下方的tabbar,每个页面,第一次点击的时候,有明显的闪烁bug。(大家也可以参考一下市面上的小程序,小部分的小程序有这个闪烁问题,大部分的小程序没有这个闪烁的问题(如:携程小程序))

小程序tabbar闪烁

bug产生原因

那么我们就要去思考了,为什么人家的小程序没有这个bug呢?

想这个问题前,要先去想这个bug是怎么产生的,我猜测是每个tabbar页面都有个初始化的过程,第一次渲染页面的时候要去重新渲染tabbar,每个页面的tabbar都是从0开始渲染,然后会缓存到每个页面上,所以第二次点击就没有这个bug了。

解决tabbar闪烁问题

为了解决这个问题,我想到了SPA ,也就是只留一个页面,其他的tabbar页面都弄成组件。

效果展示

成功解决tabbar闪烁问题

已经解决,tabbar闪烁的问题。

代码思路,通过wx:if 控制组件的显示隐藏。

小程序自定义tabbar跳转闪烁,小程序,javascript

小程序自定义tabbar跳转闪烁,小程序,javascript

源码地址:https://gitlab.com/wechat-mini-program1/tabbar-SPA
https克隆地址:https://gitlab.com/wechat-mini-program1/tabbar-SPA.git

写在最后

1、我也是在网上见过别人的一些评论,说如果将小程序重构成这种单页面,会有卡顿问题,我目前没有发现这个问题,可能是我做的小程序功能比较少。

2、至于生命周期,将页面切换成组件后,页面的那些生命周期也肯定都不能使用了,只能用组件的生命周期,我之前开发使用组件的生命周期实现业务逻辑也没什么问题。 触底加载这些也只能换成组件去实现了。

3、小程序最上面的标题,也可以使用以下代码来实现。就是在每个组件初始化的时候要去执行下列代码。文章来源地址https://www.toymoban.com/news/detail-774071.html

            wx.setNavigationBarTitle({
                title: '',
              });

到了这里,关于为了解决小程序tabbar闪烁的问题,我将小程序重构成了 SPA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

    pages.json  上面可以看到tabbar我使用的原生的,但是值配置了pagepath,并且page里三个首页都可以自定义顶部导航栏,当然如果删掉custom那一行代码,就切换成原生顶部导航栏了。 下面拿一个首页作为代码演示:(顶部自定义导航栏组件和底部导航栏组件会放在最后) 下图组件

    2023年04月09日
    浏览(89)
  • 小程序Taro框架 自定义底部Tabbar,处理自定义Tab栏切换卡顿、闪烁

    最近在用Taro框架开发一个小程序,有一个自定义底部Tabbar的需求,最终效果如下  这页是我第一次接触自定义小程序底部Tabbar,所有第一选择必然是相看官方文档:微信小程序自定义 Tabbar | Taro 文档 ( 如果第一次做,请一定要仔细看这个文档 ) 按照文档正常配置app.confi

    2024年03月21日
    浏览(43)
  • uniapp 开发小程序的时候使用自定义 tabbar 时出现切换页面闪烁的情况

    问题:在使用自定义组件的时候可以看到页面切换明显的闪烁, 这种体验是很不好的, 当然最好的方式就是使用原生导航栏, 不要搞花里胡哨的东西。 来看下体验不好的效果 优化调整 先说思路,就是仍然设置原生 tabbar, 在应用启动的时候主动隐藏原生 tabbar, 然后使用自定义组

    2024年02月03日
    浏览(41)
  • uni小程序 自定义tabbars切换 闪动问题解决(通俗易懂)

    在小程序开发中,默认tabbar基本上是不能够满足我们的需求的,多数情况下都需要引入自定义的tabba, 但是在使用自定义tabbar的过程中就会遇到一些问题,例如切换闪动(由于tabbar页面跳转,组件重新创建导致)... 下面就看看怎么样去解决这个问题 其实很简单, 就是以组件

    2024年02月09日
    浏览(37)
  • 解决uni-app小程序原生tabbar 添加阴影问题

    下面是实现的效果  步骤1 创建一个组件  文件名和组件名要一致  步骤2  在组件中实现阴影效果 步骤3 在tabbar 页面使用  直接使用 即可 不用引入  

    2024年02月07日
    浏览(64)
  • 解决微信小程序自定义tabbar跳转页面图标闪动问题

    情况一    如果你的tabbar对应的页面是component,那就在component下面加上 其中的selected是该tab页面对应的索引值 情况二    如果你的tabbar对应的页面是page,那就将上面的if判断写在page的onshow里面 闪动问题就解决啦~

    2024年02月12日
    浏览(62)
  • WebSocket 中的心跳是为了解决什么问题?

    WebSocket 是一种在客户端和服务器之间建立持久化连接的协议,它允许双方实时地交换数据。由于 WebSocket 连接是长时间保持的,因此需要一种机制来确保连接的稳定性和可靠性,这就是心跳机制。 心跳机制是指定期发送一些数据包来保持连接的活跃状态。在 WebSocket 连接中,

    2024年02月16日
    浏览(38)
  • 文件系统内部的inode是为了解决什么问题?有什么用途?

    文件系统内部的inode(Index Node)是为了解决文件管理和数据存储的问题,并提供了一些重要的用途,包括: 1. 文件索引:inode是文件系统中的一个数据结构,它存储了文件的元数据,如文件名、文件大小、文件权限、文件所有者等信息。inode相当于一个文件的索引,通过它可

    2024年02月15日
    浏览(40)
  • winform窗体闪烁问题解决方式

    winform窗体闪烁问题解决方式 1、使用窗体双缓冲 SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); UpdateStyles(); 窗体的DoubleBuffered 指示是否对控件进行双缓存处理。 2、使用CreateParams的使用解决闪屏问题

    2024年02月12日
    浏览(91)
  • UE4 解决景深效果闪烁问题

    原因: 1.模型的垂直竖线:造成抗锯齿算法对竖线的渲染计算,处于一种不稳定的状态,因此闪烁 解决办法:使用LOD,用贴图去替代线条模型 2.材质的法线贴图:当法线贴图含有垂直竖线的纹理效果,也会造成闪烁,比如这种幕墙材质 解决办法:关闭或动态调整法线贴图强

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包