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添加自定义右键菜单的完整实例
Dec 08 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
vue-router中hash模式与history模式的区别
Jun 23 Vue.js
Vue监视数据的原理详解
Feb 24 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
vue的项目如何打包上线
Apr 13 Vue.js
vue项目打包后路由错误的解决方法
Apr 13 Vue.js
vue3不同环境下实现配置代理
May 25 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
python使用Image处理图片常用技巧分析
2015/06/01 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
python做反被爬保护的方法
2019/07/01 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
Python os库常用操作代码汇总
2020/11/03 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
工厂会计员职责
2014/02/06 职场文书
社区护士演讲稿
2014/08/27 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
军训后的感想
2015/08/07 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书