Vue实现tab导航栏并支持左右滑动功能


Posted in Vue.js onJune 28, 2021

本文主要介绍:利用Vue实现tab导航栏,并且通过flex布局实现左右滑动,计算按钮的位置,当点击第一屏展示的最后一个且还有元素未展示时,自动滑动显示出未显示的元素。

tab导航栏布局:

<section class="theme-list">
  <div class="fixed-nav" ref="fixednav">
    <div class="fixed-nav-content">
      <p
        v-for="(item, index) in theme"
        :key="index"
        :class="['tab-title', activeId === index && 'select-tab']"
        @click="changeTab(index, $event)"
      >
        {{ item }}
      </p>
    </div>
  </div>
</section>
theme: ['CSDN博客', '博客园', '高考加油', '中考加油', '小欢喜', '七十周年'],
activeId: 0

导航栏样式代码:

.theme-list {
  margin-top: 12px;
}
.fixed-nav {
  overflow-x: scroll;
  -webkit-overflow-scrolling: touch;
}
.fixed-nav-content {
  display: flex;
}
.tab-title {
  padding: 0 13px;
  margin-right: 12px;
  color: #141414;
  border-radius: 13px;
  font-size: 12px;
  flex-shrink: 0;
  height: 0.52rem;
  line-height: 0.52rem;
}

此时我们可以实现下面的样式,并且可以左右滑动tab:

Vue实现tab导航栏并支持左右滑动功能

需要注意的是,在样式代码中需要添加flex-shrink : 0,这样才会当tab宽度大于外部容器宽度时不会收缩。

这样,我们基本的tab导航栏已经实现了,现在我们来实现:点击“中考加油”时,整个tab向左滑动,显示出剩下的tab元素。

changeTab(id, event) {
  // 如果选择的和当前激活的不同
  if (id !== this.activeId) {
    this.activeId = id;
    // 计算当前按钮的位置,看是否需要移动
    const spanLeft = event.clientX; // 当前点击的元素左边距离
    const divBox = document.querySelector(".select-tab").clientWidth / 2; // 点击的元素一半宽度
    const totalWidths = document.body.clientWidth; // 屏幕总宽度
    const widths = totalWidths / 2; // 一半的屏幕宽度
    const spanRight = totalWidths - spanLeft; // 元素的右边距离
    const scrollBox = document.querySelector(".fixed-nav"); // 获取最外层的元素
    const scrollL = scrollBox.scrollLeft; // 滚动条滚动的距离
    // 当元素左边距离 或者 右边距离小于100时进行滑动
    if (spanRight < 100 || spanLeft < 100) {
      scrollBox.scrollLeft = scrollL + (spanLeft - widths) + divBox;
    }
  }
}

通过这个方法可以实现tab的自动滚动了,但是此时还有一个问题是:在滑动的时候会显示出滚动条,显然是不太美观的。

/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
::-webkit-scrollbar {
  width: 0.01rem;
  opacity: 0;
  display: none;
}
/*定义滚动条轨道 内阴影+圆角*/
::-webkit-scrollbar-track {
  background-color: #fff;
  opacity: 0;
}
/*定义滑块 内阴影+圆角*/
::-webkit-scrollbar-thumb {
  width: 0.01rem;
  border-radius: 0.01rem;
  opacity: 0;
}

这样,一个导航条就实现了,可以在结合公司的业务修改一下导航条的样式就可以啦!

到此这篇关于Vue实现tab导航栏,支持左右滑动的文章就介绍到这了,更多相关Vue左右滑动导航栏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
Vue如何清空对象
Mar 03 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
Vue3.0写自定义指令的简单步骤记录
vue.js Router中嵌套路由的实用示例
Jun 27 #Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
vue-router中hash模式与history模式的区别
Vue-Element-Admin集成自己的接口实现登录跳转
Vue + iView实现Excel上传功能的完整代码
Vue vee-validate插件的简单使用
Jun 22 #Vue.js
You might like
php实现的ping端口函数实例
2014/11/12 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php创建图像具体步骤
2017/03/13 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
php中数组最简单的使用方法
2020/12/27 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
Python 迭代器工具包【推荐】
2016/05/06 Python
Python变量赋值的秘密分享
2018/04/03 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
python实现自动清理重复文件
2020/08/24 Python
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
PyQt QMainWindow的使用示例
2021/03/24 Python
前台接待员岗位职责
2014/01/02 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
大专学生求职自荐信
2014/07/06 职场文书
委托书怎样写
2014/08/30 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
平安建设汇报材料
2014/12/29 职场文书
社区服务理念口号
2015/12/25 职场文书