解决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 相关文章推荐
js模仿windows桌面图标排列算法具体实现(附图)
Jun 16 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
JS根据生日月份和日期计算星座的简单实现方法
Nov 24 Javascript
前端主流框架vue学习笔记第一篇
Jul 26 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
微信小程序与公众号实现数据互通的方法
Jul 25 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 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的控制语句
2006/10/09 PHP
投票管理程序
2006/10/09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
python中字符串的操作方法大全
2018/06/03 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
python推导式的使用方法实例
2021/02/28 Python
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
会计自荐信范文
2014/03/09 职场文书
趣味运动会策划方案
2014/06/02 职场文书
买房子个人收入证明
2014/10/12 职场文书
2014年变电站工作总结
2014/12/19 职场文书
mysql 子查询的使用
2022/04/28 MySQL
在python中读取和写入CSV文件详情
2022/06/28 Python