vue之tab栏切换

2023-10-26

一个简单的tab栏切换组件,由tabs以及tab-pane组成

效果图
在这里插入图片描述

使用

<template>
  <div class="container">
    <tabs
      default-active="2"
      class="build-tabs"
    >
      <tab-pane
        label="tab栏标题1"
        index="1"
      >tab栏内容1</tab-pane>
      <tab-pane
        label="tab栏标题tab栏标题2"
        index="2"
      >
        tab栏内容2
      </tab-pane>
      <tab-pane
        label="tab栏标题"
        index="3"
      >tab栏内容3</tab-pane>
      <tab-pane
        label="标题"
        index="4"
      >tab栏内容4</tab-pane>
      <tab-pane
        label="tab栏标题3"
        index="5"
      >tab栏内容5</tab-pane>
    </tabs>
  </div>
</template>

tabs

<template>
  <div
    v-show="pans.length"
    class="tabs"
  >
    <div class="tab-title">
      <div
        v-for="(item) in pans"
        :key="item.id"
        class="item"
        :class="{ 'active': currentActive === item.index }"
        @click="changeTab(item.index)"
      >{{ item.label }}</div>
    </div>
    <div class="tab-content">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    mode: {
      type: String,
      default: "horizontal/vertical"
    },
    defaultActive: {
      type: String | Number,
      default: '1'
    },
    defaultColor: {
      type: String,
      default: '#409EFF'
    }
  },
  data: () => {
    return {
      currentActive: '',
      pans: []
    }
  },
  computed: {

  },
  watch: {
    defaultActive: {
      handler (newVal) {
        this.currentActive = newVal
      },
      immediate: true
    }
  },
  mounted () {
  },

  methods: {
    changeTab (val) {
      this.currentActive = val
    },
  }
}
</script>
<style scoped lang="scss">
::root {
  --color: "#409EFF";
}
.tabs {
  .tab-title {
    display: flex;
    // align-items: flex-start;
    align-items: stretch;	// 侧边栏时,使侧栏高度与内容高度一致,按最高的显示
    margin-bottom: 14px;
    border-bottom: 1px solid #ccc;
    .item {
      padding: 20px;
      /* padding-bottom: 20px; */
      cursor: pointer;
      white-space: nowrap;
    }
    .active {
      // color: var(--color);
      color: #409EFF;
      /* padding-bottom: 15px; // 修正边框值:20px - 5px = 15px */
      border-bottom: 5px solid #409EFF;
      background-image: linear-gradient(
        to top,
        rgba($color: #409EFF, $alpha: 0.2),
        transparent
      );
    }
  }
}
</style>

tab-pane

<template>
  <div
    v-show="show && renderPan"
    class="tab-pane"
  >
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: 'tabPane',
  props: {
    index: {
      type: [String, Number],
      default: ''
    },
    label: {
      type: String,
      required: true
    }
  },
  data: () => {
    return {
      renderPan: false
    }
  },
  computed: {
    show () {
      if (this.$parent.currentActive === this.index) return true
      return false
    }
  },
  mounted () {
    this.$parent.pans.push({ id: Date.parse(new Date()) + Math.random(), index: this.index, label: this.label });
    this.renderPan = true
  },
  methods: {
  },
}
</script>
<style scoped lang="scss">
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue之tab栏切换 的相关文章

随机推荐

  • 第11章 分布式事务解决方案

    mini商城第11章 分布式事务解决方案 一 课题 分布式事务解决方案 二 回顾 1 MongoDB部署及应用 2 购物车功能实现 3 订单功能实现 三 目标 1 分布式事务 事务简介 本地事务讲解 不同场景下的分布式事务 2 分布式事务理
  • C++开发过程笔记~~持续更新~~

    文章目录 1 为什么只有 析构函数不论基类和派生类都用到了virtual关键字 2 c inline使函数实现可以在头文件中 避免多重定义错误 3 this gt 4 调用另一个cpp文件中函数 多个 cpp文件编译 5 有空看看开源项目g
  • 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Update 更新操作过程

    前往老猿Python博文目录 一 Nchf OfflineOnlyCharging Update消息交互过程 Nchf OfflineOnlyCharging Update消息是是5G融合计费的离线计费中CHF为SMF中的NF功能体CTF提
  • 用css 添加手状样式,鼠标移上去变小手,变小手

    用css 添加手状样式 鼠标移上去变小手 变小手 cursor pointer 用JS使鼠标变小手onmouseover 鼠标越过的时候 nm use ver this style cursor hand cursor其他取值 auto 标
  • OpenGL学习笔记(六)-模型加载

    参考网址 LearnOpenGL 中文版 哔哩哔哩教程 第三章 模型加载 3 1 Assimp 1 Assimp能够导入多种模型文件格式 将所有的模型数据加载至Assimp的通用数据结构中 我们就能够从Assimp的数据结构中提取我们所需的
  • linux操作系统下根目录下各目录的作用

    bin 二进制文件 普通用户和超级用户使用的命令 sbin 二进制文件 root用户也就是管理员使用的命令 普通用户没有权限 boot 系统启动的关键文件 dev 管理各个设备的文件 etc 所有程序的配置文件 home 用户家目录文件 l
  • 消息循环中的TranslateMessage函数和DispatchMessage函数

    TranslateMessage函数 函数功能描述 将虚拟键消息转换为字符消息 字符消息被送到调用线程的消息队列中 在下一次线程调用函数GetMessage或PeekMessage时被读出 函数原型 BOOL TranslateMessag
  • javanio应用场景,从理论到实践!

    直击面试 反正我是带着这些问题往下读的 说一下 JVM 运行时数据区吧 都有哪些区 分别是干什么的 Java 8 的内存分代改进 举例栈溢出的情况 调整栈大小 就能保存不出现溢出吗 分配的栈内存越大越好吗 垃圾回收是否会涉及到虚拟机栈 方法
  • moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color详解

    前往老猿Python博文目录 注意 本文为收费专栏文章 对应免费专栏文章为 moviepy音视频剪辑 颜色相关变换函数blackwhite colorx fadein out gamma corr invert colors lum con
  • Java 匿名对象

    一 简介 1 1 含义 没有名字的对象 以常规的创建对象的方法 AtomicInteger atomicInteger new AtomicInteger 100000 格式 类名 变量名 new 类名 这样就完成了对象的创建 注意 内可以
  • windows系统启动服务一直不成功,查看windows日志方法

    今天遇到一个问题 windows系统部署了spring cloud的服务 手动执行start bat文件可以启动服务 用服务的方式启动就一直启动不了 通过 控制面板 gt 管理工具 在 事件查看器 gt windows日志 gt 应用程序
  • 遮罩和蒙版有什么区别,视频遮罩怎么用

    在制作短视频时 好多小伙伴分不清遮罩与蒙版的区别 甚至有的人认为它们就是一个东西 要说起来 这两个看似一样的概念 其实还是有很大的区别 今天就来带各位了解一下遮罩和蒙版有什么区别 视频遮罩怎么用 希望对各位认识并理解蒙版和遮罩有一定的帮助
  • 根据java实体类生成创建表sql步骤

    根据java实体类生成创建表sql步骤 根据java实体类生成创建表sql语句时 方法是利用java反射 AOP注解 主要步骤如下 1 注解类 一般在生成表的时候 需要表名 主键名 字段名 对应到注解上至少要体现出这三部分 1 1表名 主键
  • 【Flutter 组件】004-基础组件:图片及 ICON

    Flutter 组件 004 基础组件 图片及 ICON 一 图片 1 Image 概述 Flutter 中 我们可以通过 Image 组件来加载并显示图片 Image 的数据源可以是 asset 文件 内存以及网络 Image 是一个用于
  • FLINK SQL实战案例之商品销量实时统计

    问题导读1 本文的业务包含哪些流程 2 本文难点在什么地方 3 如何通过flink sql实现商品销量实时统计 1 案例背景介绍互联网电商往往需要对订单商品销量实时统计 用于实时大屏展示 库存销量监控等等 本文主要介绍如何通过flink s
  • Vim/Vi中保存文件并退出编辑器

    Vim Vi模式 启动Vim编辑器时 处于正常模式 在这种模式下 可以使用vim命令并浏览文件 0 打开package json 终端命令vim package json 1 进入编辑模式 按 i键 2 按 Esc可返回正常模式 3 打开文
  • 如何给数据库中的表插入数据?

    R星校长 为表的所有字段插入数据 向表中插入数据最简单的方法就是使用INSERT语句 INSERT语句需要你声明要插入内容的表 table 名和内容 values 语法规则为 INSERT INTO 表名 字段名 VALUES 内容 举个例
  • uni-app引入web3在真机运行下兼容性处理方法

    uni app开发跨平台应用程序 项目搭建主要前端框是Uni app Vue3 TS Vite 项目搭建参考文章Uni app Vue3 TS Vite 创建项目 Hbuilderx版本是3 6 17 安装web3 yarn add web
  • WebRTC音频系统 peerconnection初始化

    文章目录 2 1 peerconnection conductor 2 2 PeerConnectionFactory和PeerConnection 2 2 1 CreatePeerConnectionFactory 2 2 2 PeerC
  • vue之tab栏切换

    一个简单的tab栏切换组件 由tabs以及tab pane组成 效果图 使用