解决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 相关文章推荐
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
js中获取事件对象的方法小结
Mar 13 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 Javascript
JS清除选择内容的方法
Jan 29 Javascript
javascript清空table表格的方法
May 14 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
基于three.js实现的3D粒子动效实例代码
Apr 09 Javascript
将RGB值转换为灰度值的简单算法
Oct 09 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
vue+AI智能机器人回复功能实现
Jul 16 Javascript
JavaScript实现简单日历效果
Sep 11 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实现mysql数据库操作类分享
2014/02/14 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
python实现复制大量文件功能
2019/08/31 Python
python创建学生成绩管理系统
2019/11/22 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
小学数学教学反思
2014/02/02 职场文书
市场营销毕业求职信
2014/08/07 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书