首页 > 其他分享 >直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现

直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现

时间:2023-06-13 14:24:27浏览次数:49  
标签:vue app move item 宽度 tab 组件 菜单项

直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现

子组件:

 


<template>
<div>
    <el-button v-if="move != 0 && !dataLen" size='small' icon="el-icon-arrow-left" @click="navPrev"></el-button> 
    <ul ref="dataNavList">
        <li @click="tabInfo(item)" v-for="(item, index) in navList" :key="index" :style="{transform:'translateX(-'+move+'px)'}">
         <span :class="{active: activeName == item}">{{item}}</span>
        </li> 
    </ul>
    <el-button v-if="move != (this.dataNavListRealWidth-this.dataNavListViewWidth + 100) && !dataLen" size='small' icon="el-icon-arrow-right" @click="navNext"></el-button> 
</div>
</template>
<script>
export default {
    name:'swiperTab',
    props:{
     navList:{
     type:Array,
     default:[]
     }
    },
    data () {
    return {
     activeName:'', // 选中的tab名
        move:0,
        dataNavListRealWidth:0,
        dataNavListViewWidth:0,
        dataLen:false
    };
},
mounted() {
this.activeName = this.navList[0]; // 默认数组第一个选中
    this.dataNavListRealWidth = this.$refs.dataNavList.scrollWidth; // scrollWidth获取整个菜单实际宽度
this.dataNavListViewWidth = this.$refs.dataNavList.offsetWidth; // offsetWidth获取菜单在当前页面可视宽度
     if(this.dataNavListRealWidth <= this.dataNavListViewWidth){ // tab不多的时候不显示左右两边的操作按钮
     this.dataLen = true;
     }
    // 窗口大小变化时触发。实时更新可视宽度
    window.onresize = () => {
        return (() => {
            this.dataNavListViewWidth = this.$refs.dataNavList.offsetWidth;
            if(this.move>this.dataNavListViewWidth){
                this.move=this.dataNavListViewWidth;
            }
        })()}
},
methods:{
//点击触发事件,将当前tab信息传递给父组件
tabInfo(item){
this.$emit('tabClick',item);
this.activeName = item;
},
// 当菜单项向右的可移动距离大于单个菜单项的宽度时,move减去一个菜单项的宽度(即右移移动一个菜单项的宽度),
// 当菜单项向右的可移动距离小于单个菜单项的宽度时,move等于0(即回到最开始没有移动的状态)
    navPrev(){
        if(this.move>(100*5)){
         console.log(this.move)
            this.move=this.move-(100*5);
        }else{
            this.move=0;
        }
    },
    // 当菜单项向左的可移动距离大于单个菜单项的宽度时,move减去一个菜单项的宽度(即左移移动一个菜单项的宽度),
// 当菜单项向左的可移动距离小于单个菜单项的宽度时,move等于可以向左移动的最大值(即到最末尾)
//实际宽度减去可视宽度就是可移动的范围即move的范围
    navNext(){
       if(this.move<this.dataNavListRealWidth-this.dataNavListViewWidth-(100*5)){
            this.move=this.move+(100*5);
        }
        else{
            this.move=this.dataNavListRealWidth-this.dataNavListViewWidth + 100;
        }
    }
}
  }
</script>
<style scoped>
.active{color: #ff813b;}
     .dataNav {
     margin-top: 50px;
         display: flex;
         height: 70px;
         .dataNavList {
             display: flex;
             padding: 0 10px;
             overflow: hidden;
             .dataNavListItem{
                 display: inline-block;
                 /*//每个菜单项的宽度要固定,不然move值无法计算,当然也可以通过其他方法来设置以适应自己的表格*/
                 width: 100px; 
                 min-width: 100px;
                 border-radius: 5px;
                 font-size: 15px;
                 text-align: center;
                 color: #7E8690;
                 line-height: 35px;
                 /*// 过渡效果*/
                 transition:transform .2s;
             }
             :hover {
                 color: #1D4190;
                 cursor: pointer;
             }
         }
     }
</style>
 

父组件:

 


//引入子组件
<swiperTab :navList='navList' @tabInfo='tabInfo'></swiperTab>
<script>
export default {
    data () {
    return {
        navList:[]
    };
},
methods:{
//点击触发事件,将当前tab信息传递给父组件
tabInfo(item){
console.log(item);
}
}
  }
</script>

 

 以上就是直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现, 更多内容欢迎关注之后的文章

 

标签:vue,app,move,item,宽度,tab,组件,菜单项
From: https://www.cnblogs.com/yunbaomengnan/p/17477365.html

相关文章

  • Stable Diffusion WebUI 环境
    StableDiffusion是热门的文本到图像的生成扩散模型,本文介绍了如何准备其WebUI环境。StabilityAIStabilityAPIExtensionforAutomatic1111WebUIStableDiffusionwebUI环境基础OS:Ubuntu22.04.2LTSKernel:5.19.0CPU:AMDRyzen73700XGPU:NVIDIAGeF......
  • 创建vue工程
    一、创建项目(1)elementui elementui就是基于vue的一个ui框架,该框架基于vue开发了很多相关组件,方便我们快速开发页面。 网页链接:https://element.eleme.cn/#/zh-CN/component/installation ......
  • 如何使用Stable Diffusion生成艺术二维码?
    硬件准备物理内存:至少16G(8G直接安装阶段就卡死)N卡:此处我使用GTX16606G(2019年双12购买)操作系统windows11软件准备网络要通畅git:https://git-scm.com/download/winPython:https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exeCUDA驱动:https://develo......
  • vue时间选择器 nut-datepicker
    vue时间选择器https://blog.csdn.net/Marshall_Ma/article/details/1242444511、年-月-日时:分效果展示:打开选择器:<divclass="label">记录日期:</div><nut-cell:showIcon="true":isLink="true"@click.native="switchPicker"......
  • 前端vue自定义简单实用下拉筛选 下拉菜单
    前端vue自定义简单实用下拉筛选下拉菜单, 下载完整代码请访问: https://ext.dcloud.net.cn/plugin?id=13020效果图如下:   ####使用方法```使用方法<!--titleArr:选择项数组dropArr:下拉项数组@finishDropClick:下拉筛选完成事件--><ccDropDownMenu:tit......
  • 【Tabby】如何拆分窗口和取消拆分窗口
    如下图,在设置->快捷键中进行设置  ......
  • vue中使用axios获取不到响应头Content-Disposition的解决办法
    项目中,后端返回的文件流,fileName是机构名称+服务器时间。前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在heade里添加,还要将它们在A......
  • vue实现的前端模糊匹配搜索
    vue实现的前端模糊匹配搜索<divid="app"><divclass="wrapper"><inputtype="text"v-model="searchText"><button@click="submit">搜索</button></div><table>......
  • vue3之setup
    一、Vue3中script的三种写法Vue3新增了一个叫做组合式api的东西,英文名叫CompositionAPI。因此Vue3的script现在支持三种写法。1)最基本的Vue2写法setup()属性<scriptsetup>无论是代码行数,还是代码的精简度,<scriptsetup>的方式是最简单的形式。如果......
  • appium2+Python3+红米手机k40 无法启动APP
    在网上一直找不到解决的方法,困扰了很久。OEM解锁权限和USB调试安全设置也打开试过了,还是不行。有懂的大佬吗!Python报错提示:Message:Anunknownserver-sideerroroccurredwhileprocessingthecommand.Originalerror:ErrorexecutingadbExec.Originalerror:'Command......