自定义tabbar切换时会闪烁

预估支持的基础库版本 预估支持的客户端版本 平台 确认修复版本
- - - -
  1. 减少不必要的 setData 可以消除 data 变化导致的闪烁现象
  2. 使用普通 image 代替 cover-image 、普通 view 代替 cover-view 可以减弱由于 cover 组件创建偏慢导致的闪烁现象(但要注意组件层叠层级) 但 android 本身的的渲染延迟仍然会导致一部分闪烁现象
最后一次编辑于  2023-05-11
关注Issue发表评论
赞 42

84 个评论

  • 善缘
    善缘
    2022-03-16

    现在都2022年了,这么多用户反馈了2年多的问题还解决不了吗,我不相信以腾讯的实力解决不了这个问题,如果个别开发人员解决不了这个问题,腾讯这么多技术大佬能帮忙解决下吗。

    2022-03-16
    赞同 10
    回复 1
    • julius
      julius
      2023-11-27
      开发过小程序的同学不会还真有人相信腾讯的技术实力吧。
      2023-11-27
      2
      回复
  • 冯锋
    冯锋
    2022-02-11

    可以将原来放置 image 标签的位置,替换为两个 image 标签,一个存放选中图片路径,一个存放未选中图片路径,然后通过 selected 状态来控制是否展示元素(将不需要展示的元素设置为 visibility: hidden;)。

    此时页面会同时渲染所有的 icon 图片,即使不需要展示,也会渲染,因此会有一个透明的占位,此时可以使用 position: absolute 布局来使其重叠展示(根据具体业务逻辑灵活调整)

    使用上述方法,可以解决“首次切换闪烁”的问题,不过存在两点不足:

    1. 图片路径必须使用网络地址(不清楚为啥);

    2. 如果 icon 下需要展示文字描述,会错位,可以考虑将文本和 icon 合并为一个新的 icon 来解决;

    下面是使用官方 demo 首次加载后切换的效果:

    下面是优化以后的效果:

    下面是主要实现代码:

    <view class="tab-bar">
      <view class="tab-bar-border"></view>
      <view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
        <image class="img" src="{{item.selectedIconPath}}" style="{{selected === index?'':'可见性: 隐藏;'}}"></image>
        <image class="img" src="{{item.iconPath}}" style="{{selected === index?'visibility: hidden;':''}}"></image>
      </view>
    </view>
    
    2022-02-11
    赞同 7
    回复 5
    • Shgdom
      Shgdom
      2022-12-29
      好方法,多谢大神!
      2022-12-29
      回复
    • ONE
      ONE
      2023-02-16
      你只解决了icon加载导致的闪烁问题,但是tab切换页面首次渲染导致至整个tabbar闪烁的问题还是无法解决啊
      2023-02-16
      3
      回复
    • Charon
      Charon
      2023-05-17回复ONE
      但是闪烁是整个tabbar闪烁啊,并不是上面的字和icon
      2023-05-17
      1
      回复
    • 何先森
      何先森
      2天前回复Charon
      请问解决了吗
      2天前
      回复
    • 何先森
      何先森
      2天前回复ONE
      请问解决了吗
      2天前
      回复
  • 王千秋
    王千秋
    2023-06-14

    真NB啊腾讯,状态直接中止了,自家腾讯云小程序都有这个问题,打死不修呗

    2023-06-14
    赞同 5
    回复
  • 得得得得得得得得得得得得得得得
    得得得得得得得得得得得得得得得
    2022-01-06

    超过两个tabbar页不要单纯的使用官方说的show时getTabBar().setData设置选中态,自定义tabbar是多个实例的,那样只会改变当前tabbar实例的选中态,其他页面的tabbar实例并没有改变选中态,这样会导致你说的那些问题。

    正确做法:

    在每个tabbar lifetimes attached时找个地方(比如globalData)存进去,然后在每个tabbar页面show时遍历存的tabbar实例setData 选中态, 因为官方demo只有两个tabbar页,于是只获取当前页的tabbar实例setData不会有问题,官方这个不回复态度就是只管拉屎不管搽屁股。

    2022-01-06
    赞同 4
    回复 6
    • 白茶清欢
      白茶清欢
      2022-01-11
      大佬给个示例吧
      2022-01-11
      回复
    • 略略略🇨🇳
      略略略🇨🇳
      2022-03-02
      同求示例
      2022-03-02
      回复
    • 媛媛
      媛媛
      2022-04-22
      同求
      2022-04-22
      回复
    • Murph
      Murph
      2022-07-25
      感谢 正解!
      2022-07-25
      回复
    • JeanHAOo  ོ་
      JeanHAOo ོ་
      2023-11-28回复Murph
      怎么解决的啊
      2023-11-28
      回复
    查看更多(1)
  • blingbling
    blingbling
    2023-03-15

    今天是2023年3月15日(国际消费者权益日),第一次切换依旧还在闪烁。

    2023-03-15
    赞同 3
    回复
  • win
    win
    2023-03-03

    2023年了这个问题还没解决吗?体验太差了

    2023-03-03
    赞同 3
    回复 1
    • 司马缸砸光
      司马缸砸光
      2023-06-08
      微信真是托谢特
      2023-06-08
      1
      回复
  • ๛
    2023-02-08

    2023宇宙闪烁无解

    2023-02-08
    赞同 3
    回复
  • 🌞
    🌞
    2022-08-11

    家人们 我知道了

    切换的时候设置globalData


    在自定义tabbar的生命周期里setData

    2022-08-11
    赞同 3
    回复 15
    • 🌞
      🌞
      2022-08-11
      亲测 不闪
      2022-08-11
      回复
    • Jack Pearsion
      Jack Pearsion
      2022-08-17
      你怎么这么棒. 我亲死你!亲死你!亲死你!
      2022-08-17
      回复
    • XiaoYu_
      XiaoYu_
      2022-08-23
      第一次还是闪
      2022-08-23
      回复
    • 天山
      天山
      2022-08-25
      我也试试看呢
      2022-08-25
      回复
    • 周生
      周生
      2022-11-12
      不行呀
      2022-11-12
      回复
    查看更多(10)
  • LevenHan
    LevenHan
    2023-08-10

    今天是2026年8月10日,微信小程序快倒闭了,偶然间被指派维护公司这个老项目,该问题依然没有得到解决

    2023-08-10
    赞同 2
    回复
  • ꯭来꯭吧꯭,꯭宝꯭贝꯭
    ꯭来꯭吧꯭,꯭宝꯭贝꯭
    2023-05-29

    custom-tab-bar/index.js文件

    第一步:将data中定义得 selected赋值为null

     

    第二步:将methods中得switchTab函数中之前得selected赋值操作删除 (注:selected赋值在其他tarbar的页面得onShow方法中已赋值过了)


    2023-05-29
    赞同 2
    回复 3
    • 红薯
      红薯
      2024-06-18
      可以的,没有之前的左侧第一个tabBar闪烁了
      2024-06-18
      回复
    • h
      h
      2024-11-29
      有用的,没有之前那么闪了,牛牛牛!老哥
      2024-11-29
      回复
    • h
      h
      2024-11-29
      有用的,没有之前那么闪了,厉害厉害!老哥
      2024-11-29
      回复

正在加载...

登录 后发表内容