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栏切换 的相关文章

  • Javascript 当我们在 Chrome 中选择“停留在页面上”时如何调用函数

    请在 Chrome 浏览器中检查我的代码 如果您点击刷新 系统会提示您 2 个选项 离开此页面并 保持此页上 当我点击2 停留在此页面按钮它必须激活我的自定义功能显示消息 任何人都可以为我提供解决方案吗
  • 使用 React js 和 Express API 服务器通过 fetch 发布对象

    我在 fetch 中的 post 方法遇到麻烦 因为我的服务器从客户端接收到一个空对象 我已经检查了客户端 但无法发送我想要发送的值 这是我的服务器 const express require express const app expre
  • 通过单击堆叠条形图打开选项卡

    我正在使用 R 构建一个包含转发的堆积条形图 ggplot and plotly 如果单击条形图的一部分 我希望打开一个新的浏览器选项卡并显示该特定日期的推文以及指定的转发量 但是 当我单击下面示例中的其中一个栏时 会打开一个不同的链接 表
  • 按住鼠标时 JavaScript 重复动作

    是否有一个 JavaScript 函数每隔如此多的毫秒重复一次 以至于按住 html 按钮 如果这可以使用标准 JavaScript 来完成 那就太好了 但使用 jQuery 或 jQuery 插件也很棒 On the mousedown
  • YouTube - 右键单击​​时不显示上下文菜单

    想法 通过使用右键拖放到视频播放器上来查找 YouTube 视频 例如 每 2 屏幕宽度 1 秒 因此 在 1920x1080 的屏幕上 如果我按下鼠标右键 将其向左拖动 384 像素 20 然后松开 视频应该快退 10 秒 我有一个 Gr
  • 添加数组的总和。显示1个输出

    更新 这个问题的答案如下 感谢在不同线程上进行的 dougtesting 将数组相加 显示总和 https stackoverflow com questions 45724641 add array together display su
  • 在 forEach() 中使用 `this` [重复]

    这个问题在这里已经有答案了 免责声明 我正在学习 JavaScript 我有一个像这样的对象构造函数 var Palette function this colors red green blue this getColorCombinat
  • Antd datepicker (date.clone/date.load 不是函数)

    我有一个反应应用程序 有一个复选框可以禁用日期选择器 但当我使用复选框禁用它时 我无法选择任何日期 如果我删除复选框及其功能 则不会出现错误 目前 我得到 date clone 不是函数 error const dateFormat YYY
  • 在 Jscript 中实例化 System.Threading.Thread 对象

    我正在尝试使用 Jscript 创建一个新的 System Threading Thread 对象 但我无法让构造函数工作 如果我只是执行以下操作 var thread new Thread threadFunc function thre
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • AngularJS 与(Angular JS + jQuery)

    我有一个关于仅使用 AngularJS 和纯 JavaScript 以及使用 AngularJS 和 jQuery 时的性能问题 ex app directive fitHeight function window return restr
  • 使用Doctype让scrollTop返回0,为什么?

    当我将此 Doctype 放入我的文档中时document body scrollTop返回零 这是为什么 当您使用该 Doctype 时 您会将每个当前浏览器放入所谓的几乎标准模式 http hsivonen iki fi doctype
  • LINQ SingleOrDefault() 等效项

    在 Typescript 中 我经常使用这种模式 class Vegetable constructor public id number public name string var vegetable array new Array
  • 如何使 Meteor 上的服务器可以访问文本文件

    我很惊讶我无法在这里搜索我的答案 似乎没有其他人遇到这个问题 当您运行meteor服务时 js html等被打包在 meteor local build文件夹中 但它似乎排除了不是js或html的内容 我有一个名为 magicsets 的文
  • bootstrap-datetimepicker 仅显示日期

    我正在用这个repo https github com smalot bootstrap datetimepicker由 smalot 提供 我只想选择并显示日期 对于其他一些地方 我显示数据和时间 因此选择此存储库 我可以设法仅使用它来选
  • 在 Mobile Safari 中点击

    敲击
  • ExtJS:简单表单忽略 formBind

    我有一个小问题让我发疯了好几天 我有一个表单面板 Ext define EC view PasswordPanel extend Ext form Panel alias widget pwdpanel bodyPadding 15 ini
  • 如何选中表格中输入文本焦点上的复选框

    我试图在输入文本焦点上检查表 DOM 中的复选框 但无法访问复选框元素 但我的焦点正在工作 这是我的 jsfiddle 链接https jsfiddle net 9qha9vft https jsfiddle net 9qha9vft 这是
  • 获取css规则、chrome扩展

    我正在开发 Chrome 扩展程序 它需要访问document styleSheets cssRules 它在某些网站上运行良好 例如w3school 但其他人则不然 比如堆栈溢出 我收到错误 Failed to read the cssR
  • 使用 Javascript 删除字符串的最后一个字符

    我有一个DIV与一些字符 如何在每次单击时删除文本中的最后一个字符DIV itself 删除第一个字符 div on click function this text function index text return text repl

随机推荐

  • 第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组成 效果图 使用