解决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 相关文章推荐
JQuery 学习笔记 选择器之三
Jul 23 Javascript
JavaScript的public、private和privileged模式
Dec 28 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
jquery实现列表上下移动功能
Feb 25 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
Sep 04 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
vue实现点击关注后及时更新列表功能
Jun 26 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
cache_lite试用
2007/02/14 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python基本语法经典教程
2016/03/11 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
什么是数据抽象
2016/11/26 面试题
保安的辞职报告怎么写
2014/01/20 职场文书
大学毕业感言100字
2014/02/03 职场文书
升学宴主持词
2014/04/02 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
鼋头渚导游词
2015/02/05 职场文书
辩论赛新闻稿
2015/07/17 职场文书
新人入职感言
2015/07/31 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Python基础之条件语句详解
2021/06/16 Python