weui-miniprogram icon indicating copy to clipboard operation
weui-miniprogram copied to clipboard

mp-tabbar组件添加一个autoSelect参数用于控制tabbar是否自动修改选中态

Open mrchar opened this issue 5 years ago • 2 comments

issue #76中,我遇到了tabbar没有按照预期跳转的问题。解决这个问题的同时,我希望也可以解决tabbar闪烁的问题。 使用mp-tabbar组件作为自定义tabbar时会出现选中态闪烁的问题,在网上也看到别人提出这个问题。可以想到,这是因为index页面的组件在show事件发生后来不及修改选中态,产生了短暂的选中态不正确的现象。
既然每个页面的tabbar是不同的实例,那么完全可以在tabbar加载的时候设置好正确的选中态,然后让选中态一直保持不变就可以了。这样可以显著提高tabbar的性能。 /pages/index/index2中的生命周期修改如下:

lifetimes: {
    attached: function() {
      if (typeof this.getTabBar === 'function' &&
        this.getTabBar()) {
        this.getTabBar().setData({
          selected: 1
        })
      }
    }
  },

/mp-tabbar组件源码中的tabChange修改如下:

tabChange: function tabChange(e) {
            var index = e.currentTarget.dataset.index;

            if (index === this.data.current) {
                return;
            }
            // this.setData({
            //     current: index
            // });
            this.triggerEvent('change', { index: index, item: this.data.list[index] });
        }

这样就不会有闪烁的问题了,不过这样单独的tabbar组件无法演示,所以最好在tabbar组件中添加一个参数autoSelect,用于控制是否自动跳转。
/mp-tabbar组件源码中的tabChange修改如下:

tabChange: function tabChange(e) {
            var index = e.currentTarget.dataset.index;

            if (index === this.data.current) {
              return;
            }
            if (this.data.autoSelect) {
              this.setData({
                current: index
              });
            }
            this.triggerEvent('change', {
              index: index,
              item: this.data.list[index]
            });
          }

custom-tab-bar中使用mp-tabbar代码如下:

<mp-tabbar list="{{list}}" current="{{selected}}" autoSelect="{{false}}" bindchange="tabChange" 
style="position:fixed;bottom:0;width:100%;left:0;right:0;"></mp-tabbar>

mrchar avatar Mar 07 '20 18:03 mrchar

感谢建议!我们研究一下实现方案。

xysDavid avatar Mar 09 '20 03:03 xysDavid

3年多了

ilaipi avatar Sep 10 '23 03:09 ilaipi