解决vant中 tab栏遇到的坑 van-tabs


Posted in Javascript onNovember 04, 2020

话不多说,先看下问题描述:

我的需求:(和头条的tab栏类似 ,单击查看头条tab栏)

点击tab栏,下方展示出来当前tab栏下的内容列表(A页面),点击列表进入详情内容(B页面),但是返回(A页面)的时候,需要显示刚才被点击的tab栏高亮显示。(如果tab栏横向有滚动条,那也得让被选中的高亮显示)。

所以,大部分人的解决办法就是将当前选中的tab的索引缓存起来,等回到该页面的时候,让被缓存的那个高亮显示出来。

坑的问题在于:van-tabs,里面的v-model默认值是0,但是类型却写着 number | string 。

解决vant中 tab栏遇到的坑 van-tabs

但是,在此时用缓存赋值给 v-model = " active " 的时候,active的值需要是number类型,才有效,否则再怎么设置都是无效的。

【代码放入项目可直接执行】

<template>
 <div>
  <van-tabs v-model="active" 
   @click="tabHandler"
   :ellipsis="false"
   :border="false"
   >
   <van-tab v-for="(tabname,idx) in tabList" :key="idx" :title="tabname"></van-tab>
  </van-tabs>
  <van-button @click="toDetailHandler">去详情页</van-button>
 </div>
</template>
<script>
export default{
 data(){
  return{
   active: Number(localStorage.getItem('activeIdx'))?Number(localStorage.getItem('activeIdx')):0,
   tabList:['111111','2222222','3333333','44444444','55555','666666','7777777','88888','999999999'],
  }
 },
 methods:{
  // tab点击事件
  tabHandler(idx){
   this.active = idx;
   localStorage.setItem('activeIdx',idx) // 将选中的tab缓存起来
  },
  // 去详情页
  toDetailHandler(){
   this.$router.push('/tab1')
  }
 }
}
</script>

最终的效果图是这样的,和头条的tab栏的效果是一样的。点击查看 头条tab效果

解决vant中 tab栏遇到的坑 van-tabs

补充知识:vue移动端框架van-sticky粘性布局,实现原理和失效原因及注意点

说到粘性布局,我们最常见的就算在app tab选项卡随页面滚动到顶部后悬停在那,看效果

解决vant中 tab栏遇到的坑 van-tabs

要实现这个效果,最简单的办法就是在css样式里添加position:sticky就可以实现,就这么简单,比用js监听页面滚动,然后达到一定高度样式变为fixed,简单且性能好。

vue 的van-sticky组件实现粘性的原理就是通过添加position:sticky实现的,但是如果你使用了position:sticky后失效,并没有效果的原因有:

1.父元素高度没子元素高,通常为父元素设置height:100%;

2:父元素设置了overflow:hidden,overflow-x:hidden,overflow-y:hidden,或者overflow:auto属性都能影响到

其中父元素是指所有父元素,不单单是上一级父元素,在vue中如果失效了别忘了看app.vue组件里是不是设置了这些。

解决好失效问题后,我们再看van-sticky的其中一个悬停的时候距离顶部的距离offset-top

offset-top单位为px,在pc端没问题,但在移动端就有问题了,比如你设计稿距离顶部的距离为90px,如果你直接offset-top=90,那么在手机上就会距离很远,

用window.devicePixelRatio获取设备的像素,然后再进行换算,说实话不同手机上还是有差别,有的手机达到效果,有的没达到

目前我是用了获取元素offsetHeight在赋值回去,如this.$refs.getheight.offsetHeight,经测试能准确达到固定的位置,

如果各位有其他好办法,请在下面留言,大家一起学习。

以上这篇解决vant中 tab栏遇到的坑 van-tabs就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
基于jquery库的tab新形式使用
Nov 16 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
Vue监听数据对象变化源码
Mar 09 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
JS实现可视化文件上传
Sep 08 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
Oct 31 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
layui使用form表单实现post请求页面跳转的方法
Sep 14 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 #Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 #Javascript
在vant中使用时间选择器和popup弹出层的操作
Nov 04 #Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 #Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 #Javascript
Vue绑定用户接口实现代码示例
Nov 04 #Javascript
vant picker+popup 自定义三级联动案例
Nov 04 #Javascript
You might like
php $_SERVER当前完整url的写法
2009/11/12 PHP
php操作mongoDB实例分析
2014/12/29 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python链接Oracle数据库的方法
2015/06/28 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
中间件的定义
2016/08/09 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
销售业务员岗位职责
2014/01/29 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
设备管理实施方案
2014/05/31 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
网络销售员岗位职责
2015/04/11 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL