iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用vue怎么实现tab标签
  • 612
分享到

使用vue怎么实现tab标签

2023-06-15 05:06:27 612人浏览 八月长安
摘要

使用Vue怎么实现tab标签?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。<template>    <div&n

使用Vue怎么实现tab标签?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<template>    <div class="main-box">        <button @click="add">添加</button>        <div class="main-box-tab">            <i @click="previous"><<</i>            <i @click="next">>></i>            <div class="main-box-tab-content" ref="tabs">                <div class="main-box-tab-roll">                    <div v-for="(item,index) in tabs" :key="index"                         :class="{'tab-item-action':actionName === item.name ,'tab-item':actionName !== item.name}"                         @click.stop="clickTab(item.name,index)">                        <span>{{item.meta.title}}</span>                        <i class="el-icon-close" @click.stop="close(item.name)"></i>                    </div>                </div>            </div>        </div>        <div class="main-box-content">            <div>{{actionName}}</div>        </div>    </div></template><script>    export default {        name: "index",        data() {            return {                tabs: [],                moveX: 0,                count: 1,                unoccupied: 0,                tabsCount: 0,                actionName: 'test1'            }        },        watch: {            actionName(val) {                let len = this.tabs.length                // 如有重复数据退出后续函数执行                for (let i = 0; i < len; i++) {                    if (this.tabs[i].name === val) {                        this.$nextTick(() => {                            this.translateX((i + 1 - this.tabsCount) * this.width - this.unoccupied)                        })                        return                    }                }                this.tabs.push({                    name: `test${this.count}`,                    meta: {                        title: `test${this.count}`                    }                })                this.$nextTick(() => {                  // (总共有多少个tabs - 未偏移时可见的元素个数) * 单个tab标签元素长度 - 被遮挡tab元素的可见部分的宽度                    this.translateX((this.tabs.length - this.tabsCount) * this.width - this.unoccupied)                })            }        },        mounted() {            this.tabs.push({                name: `test${this.count}`,                meta: {                    title: `test${this.count}`                }            })            this.$nextTick(() => {                let tabs = this.$refs.tabs                let getStyle = getComputedStyle(tabs.children[0].children[0], null)                let marginLeft = parseFloat(getStyle.marginLeft.substr(0, getStyle.marginLeft.length - 2))                let marginRight = parseFloat(getStyle.marginRight.substr(0, getStyle.marginRight.length - 2))                // 元素实际宽度 = 元素的宽度 + 外边距                this.width = marginLeft + marginRight + tabs.children[0].children[0].offsetWidth                                // // 可视区域能放入多少个元素 = 可视区域的宽度 / 子元素实际宽度                // let num = tabs.offsetWidth / this.width                // // 被遮挡tab元素的可见部分的宽度 = 可见区域的宽度 - (子元素实际宽度 * num转为整数)                // this.unoccupied = tabs.offsetWidth - (this.width * parseInt(num))                // 最终精简为取余(得数跟上面的计算是一样的)                this.unoccupied = tabs.offsetWidth % this.width                // 转为整数                this.tabsCount = parseInt(tabs.offsetWidth / this.width)            })        },        methods: {            add() {                this.count++                this.actionName = `test${this.count}`            },                        clickTab(name) {                if (this.actionName !== name) {                    this.actionName = name                }            },                        close(name) {                let len = this.tabs.length                let jumpName = null                if (len > 1) {                    for (let i = 0; i < len; i++) {                        if (this.tabs[i].name === name) {                            this.tabs.splice(i, 1)                            jumpName = this.tabs[i ? i - 1 : 0].name                            if (this.actionName !== jumpName && name === this.actionName) {                                this.actionName = jumpName                            }                            this.$nextTick(() => {                                this.previous()                            })                            return                        }                    }                }            },                        next() {                // scrollWidth获取不准确                // 使用this.width * this.tabs.length计算出总长度                let totalWidth = this.width * this.tabs.length                this.$nextTick(() => {                    let dom = this.$refs.tabs                    // 可视区域 < 滚动区域(滚动区域大于可视区域才可以移动)                    // 移动距离 + 可视区域 = 滚动区域的宽度(上一次的宽度,当点击时才是实际宽度)< 滚动区域                    if (dom.clientWidth < totalWidth && this.moveX + dom.clientWidth < totalWidth) {                        // this.moveX为0减去空余空间的宽度                        this.moveX += this.moveX ? this.width : this.width - this.unoccupied                        this.translateX(this.moveX)                    }                })            },                        previous() {                if (this.moveX > 0) {                    this.moveX -= this.width                    this.translateX(this.moveX)                }            },                        translateX(x) {                this.moveX = x < 0 ? 0 : x                this.$refs.tabs.children[0].style.transfORM = `translateX(-${this.moveX}px)`            }        }    }</script><style lang="sCSS" scoped>    .main-box {        height: 500px;        width: 500px;        padding: 10px 20px 20px 20px;        .main-box-tab {            position: relative;            padding: 10px 20px;            overflow: hidden;            & > i {                position: absolute;                cursor: pointer;                bottom: 15px;                &:nth-child(1) {                    left: 0;                }                &:nth-child(2) {                    right: 0;                }            }            .main-box-tab-content {                overflow: hidden;                .main-box-tab-roll {                    transition: transform .5s;                    display: flex;                    align-items: center;                    div {                        flex-shrink: 0;                        cursor: pointer;                        width: 130px;                        height: 25px;                        margin: 0 5px;                        display: flex;                        align-items: center;                        justify-content: space-between;                        span, i {                            font-size: 12px;                        }                        span {                            margin-left: 10px;                            overflow: hidden;                            white-space: nowrap;                            text-overflow: ellipsis;                        }                        i {                            margin-right: 10px;                        }                    }                }            }            .tab-item {                color: #cccccc;                background-color: rgba(255, 255, 255, .5);                border-radius: 0 1px 0 1px;                border: 1px solid #052141;            }            .tab-item-action {                color: #ffffff;                background: rgba(0, 180, 255, 0.8);                border-radius: 0 1px 0 1px;                border: 1px solid #1E2088;            }        }        .main-box-content {            height: calc(100% - 70px);            padding: 10px;            border: 1px saddlebrown solid;            background-size: 100% 100%;        }    }</style>

为什么要使用Vue

Vue是一款友好的、多用途且高性能的javascript框架,使用vue可以创建可维护性和可测试性更强的代码库,Vue允许可以将一个网页分割成可复用的组件,每个组件都包含属于自己的html、CSS、JavaScript,以用来渲染网页中相应的地方,所以越来越多的前端开发者使用vue。

关于使用vue怎么实现tab标签问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 使用vue怎么实现tab标签

本文链接: https://www.lsjlt.com/news/278012.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用vue怎么实现tab标签
    使用vue怎么实现tab标签?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。<template>    <div&n...
    99+
    2023-06-15
  • vue实现tab标签(标签超出自动滚动)
    当创建的tab标签超出页面可视区域时自动滚动一个tab标签距离,并可手动点击滚动tab标签,实现效果请看GIF图 效果预览GIF图 <template> &...
    99+
    2024-04-02
  • vue-router如何实现tab标签页
    这篇文章主要介绍了vue-router如何实现tab标签页,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue-router 是 Vue.j...
    99+
    2024-04-02
  • CSS怎么实现Tab切换标签效果
    这篇文章主要讲解了“CSS怎么实现Tab切换标签效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS怎么实现Tab切换标签效果”吧!本文实例讲述了纯CS...
    99+
    2024-04-02
  • vue实现兄弟组件之间跳转指定tab标签页
    目录兄弟组件之间如何跳转指定tab标签页场景vue.js实现tab页面的跳转    tab标签tab标签对应的展示的内容vue实例中对应的数据...
    99+
    2024-04-02
  • Vue中怎么实现3D标签云
    这篇文章主要讲解了“Vue中怎么实现3D标签云”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue中怎么实现3D标签云”吧!预览:代码:页面部分:<template> ...
    99+
    2023-06-20
  • Bootstrap标签页组件及bootstrap-tab怎么用
    小编给大家分享一下Bootstrap标签页组件及bootstrap-tab怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!b...
    99+
    2024-04-02
  • Vue使用video标签实现视频播放
    本文项目为大家分享了Vue使用video标签实现视频播放的具体代码,供大家参考,具体内容如下 项目需求:动态显示视频滚动条、禁止视频下载、播放时每5s更新当前时长、每10分钟暂停视频...
    99+
    2024-04-02
  • javascript使用什么标签实现
    这篇文章给大家分享的是有关javascript使用什么标签实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 javascript使用<scri...
    99+
    2024-04-02
  • 怎么使用Vue实现一个tab栏切换功能
    本篇内容介绍了“怎么使用Vue实现一个tab栏切换功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、创建Vue项目首先需要安装Vue C...
    99+
    2023-07-05
  • vue模板标签怎么用
    这篇文章将为大家详细讲解有关vue模板标签怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。模板标签的另一种用途该template标签可以在模板内的任何地方使用,以更好地组织代码。我喜欢用它来简化v-i...
    99+
    2023-06-27
  • vue怎么实现input框禁止输入标签
    这篇“vue怎么实现input框禁止输入标签”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么实现input框禁止输入...
    99+
    2023-06-29
  • vue实现鼠标滑动展示tab栏切换
    本文实例为大家分享了vue实现鼠标滑动展示tab栏切换的具体代码,供大家参考,具体内容如下 动画效果: 代码如下: <template>   <div id="h...
    99+
    2024-04-02
  • vue中怎么使用embed标签PDF预览
    今天小编给大家分享一下vue中怎么使用embed标签PDF预览的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用embed标...
    99+
    2023-06-30
  • AngularJS如何实现标签页tab选项卡切换功能
    这篇文章将为大家详细讲解有关AngularJS如何实现标签页tab选项卡切换功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:选项卡一:JavaScript+h...
    99+
    2024-04-02
  • vue中怎么使用h5 video标签实现弹窗播放本地视频
    这篇“vue中怎么使用h5 video标签实现弹窗播放本地视频”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue...
    99+
    2023-06-30
  • vue怎么实现el-menu和el-tab联动
    这篇文章主要讲解了“vue怎么实现el-menu和el-tab联动”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现el-menu和el-tab联动”吧!vue通过el-menus...
    99+
    2023-07-06
  • POM.xml标签怎么使用
    这篇文章主要介绍“POM.xml标签怎么使用”,在日常操作中,相信很多人在POM.xml标签怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”POM.xml标签怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-04
  • noscript标签怎么使用
    本文小编为大家详细介绍“noscript标签怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“noscript标签怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Javascript 的日益强大使我们...
    99+
    2023-07-05
  • Vue中如何实现3D标签云
    今天小编给大家分享一下Vue中如何实现3D标签云的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作