weui-miniprogram
weui-miniprogram copied to clipboard
mp-tabbar组件添加一个autoSelect参数用于控制tabbar是否自动修改选中态
在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>
感谢建议!我们研究一下实现方案。
3年多了