当前位置:   article > 正文

【自用笔记】微信小程序 使用van-tab时的问题处理_van-tabs

van-tabs

在本次项目中,使用了van-tab嵌套,需要更改样式和一些效果:

需求

1.外层tab的字体要比内层tab的字体大,且高度高于内层

2.实现吸顶效果

3.切换时,可以返回原点

4.解决刚开始切换时,因未渲染导致的下划线错位问题

首次进入页面实现大致效果:

切换返回的大致效果(找的别人的图)

首先要引入van组件 .josn

  1. {
  2. "usingComponents": {
  3. "van-tab": "@vant/weapp/tab/index",
  4. "van-tabs": "@vant/weapp/tabs/index"
  5. }
  6. }

在页面中开始使用 .wxml

(这里我使用bind:change事件是因为实际业务中需要调用不同的接口,所以要进行判断,在这里只是为了演示,所以把业务的东西全部删除了,大家可以根据自己的业务去做不同的处理;列表2中的内嵌tab加id是为了解决下划线错位问题)

  1. <view class="tabBox">
  2. <van-tabs active="{{active}}" bind:change="onChange" type="card" color="#1c81f6">
  3. <van-tab title="列表1" title-style='font-weight: bold; font-size: 32rpx;'>
  4. <van-tabs active="{{ activeSon }}" bind:change="onChangeSon" color="#1c81f6">
  5. <van-tab title="菜单1">
  6. <view wx:for="{{50}}" wx:key="item"> {{item}} </view>
  7. </van-tab>
  8. <van-tab title="菜单2">
  9. <view wx:for="{{50}}" wx:key="item"> {{item}} </view>
  10. </van-tab>
  11. </van-tabs>
  12. </van-tab>
  13. <van-tab title="列表2" title-style='font-weight: bold; font-size: 32rpx;'>
  14. <van-tabs active="{{ activeSon2}}" bind:change="onChangeSon" data-item="son2" color="#1c81f6" id="tabOrder">
  15. <van-tab title="菜单3">
  16. <view wx:for="{{50}}" wx:key="item"> {{item}} </view>
  17. </van-tab>
  18. <van-tab title="菜单4">
  19. <view wx:for="{{50}}" wx:key="item"> {{item}} </view>
  20. </van-tab>
  21. </van-tabs>
  22. </van-tab>
  23. </van-tabs>
  24. </view>

接下来在 .js中处理逻辑

  1. Page({
  2. data:{
  3. active: 0,
  4. activeSon: 0,
  5. activeSon2: 0,
  6. },
  7. onChange(e) {
  8. let index = e.detail.index;
  9. if(index == 2){
  10. //这里是为了防止未渲染导致tab的下划线错位,在你需要的位置加上这句话就可以了
  11. (因为我这里是嵌套的两个tab,所以刚开始所有的都加上,再通过笨方法进行测试,发现只需要在我需要的地方加就可以了)
  12. this.selectComponent('#son2').resize()
  13. }
  14. // 回到顶部(在切换后能够让滚动条重新回到顶部,如果你设置了两个事件,两个事件就都要加上)
  15. wx.pageScrollTo({
  16. duration: 0,
  17. scrollTop: 0,
  18. })
  19. //以下是对数据的重新获取
  20. this.reset() //获取前,我习惯先重置一下列表
  21. this.queryList()
  22. },
  23. onChangeSon(e){
  24. // 回到顶部
  25. wx.pageScrollTo({
  26. duration: 0,
  27. scrollTop: 0,
  28. })
  29. //以下是对数据的重新获取
  30. this.reset()
  31. this.queryList()
  32. },
  33. //重置
  34. reset() {
  35. this.setData({
  36. dataList: [],
  37. pageNum: 1,
  38. pageSize: 10,
  39. total: 0,
  40. })
  41. },
  42. queryList() {
  43. //在这里你可以重新获取列表接口,并进行渲染
  44. }
  45. })

 在样式方面,实在不是我的强项,只能用一个丑字形容,但是还是贴出来仅供参考吧。我会详细说明为什么要改这个类名的  .wxss   

(在此,重申一下,如果直接照搬模版存在不合理,比如当你使用后发现无法向下滑动,是因为涉及到业务问题,所以我做了删减,实际上我的数据是通过wx:if,并通过wx:for循环显示的,所以在这里的.wxml就不做展示了)

  1. //我比较懒,所以将整个tab的外层盒子用fixed进行固定
  2. .tabBox {
  3. width: 100%; //不100%的话,盒子无法铺满整个宽度
  4. z-index: 999; //要确保层级最高
  5. position: fixed;
  6. top: 0;
  7. }
  8. //这个是因为外层tab我用的card类型,升高了它的高度
  9. .tabBox .van-tabs--card {
  10. height: 100rpx;
  11. }
  12. //因为我觉着border太多比较繁重,仅保留了下边框,尝试过用border:none;没有效果
  13. .tabBox .van-tabs__scroll--card {
  14. border-top: none;
  15. border-right: none;
  16. border-left: none;
  17. margin: 0;
  18. width: 100%; //为了让tabs平分盒子内容,不留白
  19. height: 100%;
  20. }
  21. //这个是因为active后的标签background不够,所以要设置一样的高度,让背景色填满
  22. .tabBox .van-tabs__nav--card .van-tab.van-tab--active {
  23. height: 100rpx;
  24. }
  25. // 内嵌的tab我用的是line型,高度降低,并让它居中
  26. .tabBox .van-tabs--line {
  27. height: 80rpx;
  28. align-items: center;
  29. }
  30. //这里主要针对line型内嵌tab中的下划线下划线
  31. .tabBox .van-ellipsis {
  32. height: 90rpx;
  33. line-height: 100rpx;
  34. border-right: none; //这里发现外层tab在切换到菜单2的时候有一个border比较突兀,就给去掉了
  35. }
  36. //这里是我的数据盒子,因为tab吸顶,所以为了让列表不被遮挡,距顶大约100px,稍微多一点可以留点呼吸
  37. .dataListBox {
  38. margin-top: 200rpx;
  39. }

虽然丑,但是实现了效果(本来看文档,van-tab有一个吸顶效果,但是我尝试了没有用,大概率是我不会用,所以就使用了原始方法)

如果有其他的坑或者其他的内容,请留言,我将重新整理,一起进步

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/518924
推荐阅读
相关标签
  

闽ICP备14008679号