细节复盘5 (elementUI Tabs 标签页的应用示例&作品选集)2020-8-3

今天写了类似视频选集的功能。需求看图:
在这里插入图片描述
只提供一个作品的个数,通过这个数字动态生成以20为间隔的选项卡标签;并且,点击标签,动态生成展示集数。
比如上面这个例子,给了集数参数值为143,生成了1-20、21-40等标签,点击标签,不同标签下展示的集数不同。
(样式的话,是刚开始折叠集数具体展示,等点击了,再展开)

1、用了ui框架,结构如下

<template>
    <div class="comic_detail_num" ref="ref_detail_num">
        <!-- 有几集选项卡  -->
        <div class="num_top">
            <el-tabs v-model="activeName" @tab-click="handleClick">
                <el-tab-pane ref="el_span" :label="calnumFirst(item)+'-'+calnumEnd(item)" v-for="item in wei" :key="item">
                    <!-- 选项卡里面东西 -->
                    <div class="num_click">
                        <ul>
                            <li v-for="(val,index) in numarr().slice((calnumFirst(item)-1),calnumEnd(item))" :key="index" @click="newRouterTo('/Contentcomic',{index:item})">{{val}}</li>
                        </ul>
                    </div>
                </el-tab-pane>
            </el-tabs>
        </div>
    </div>
</template>

2、:label="calnumFirst(item)+'-'+calnumEnd(item)" 渲染的是选项卡标签里的东西;v-for="(val,index) in numarr().slice((calnumFirst(item)-1),calnumEnd(item))" 是渲染选项卡具体集数,通过slice截取数组的不同长度,显示不同的集数。
(numarr()这个是我把143这个数字从0~142都放了进一个数组里并返回这个数组,很笨的方法)
在这里插入图片描述
3、calnumFirst(item)calnumEnd(item) 这两个方法分别用来计算起始数字、终止数字,就比如说1~20,前者计算1,后者计算得到20.
在这里插入图片描述
4、两个变量 numwei 是在实例渲染完成后,通过获取的数据计算出来的。num代表总集数,wei是选项卡标签的数量。
在这里插入图片描述
在这里插入图片描述


完整代码如下:

<template>
    <div class="comic_detail_num" ref="ref_detail_num">
        <!-- 有几集选项卡  -->
        <div class="num_top">
            <el-tabs v-model="activeName" @tab-click="handleClick">
                <el-tab-pane ref="el_span" :label="calnumFirst(item)+'-'+calnumEnd(item)" v-for="item in wei" :key="item">
                    <!-- 选项卡里面东西 -->
                    <div class="num_click">
                        <ul>
                            <li v-for="(val,index) in numarr().slice((calnumFirst(item)-1),calnumEnd(item))" :key="index" @click="newRouterTo('/Contentcomic',{index:item})">
                                {{val}}</li>
                        </ul>
                    </div>
                </el-tab-pane>
            </el-tabs>
        </div>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                activeName: 'second',
                wei: 0,
                num: 0,
            };
        },
        computed: {
            introDetail() {
                let arr = this.$store.state.comicStore.comicMainData.data.comicItems;
                let param = this.$route.query.name;
                let arrOk = '没有数据';
                arr.forEach(item => {
                    if (item.name == param) arrOk = item;
                });
                return arrOk;//对象
            },
        },
        mounted() {
            this.num = this.introDetail.episodeNum;
            this.wei = Math.ceil(this.num / 20);
        },
        methods: {
            newRouterTo(routerPath, query) {
                this.$router.push({ path: routerPath, query: query });
                // this.$router.push({name: routerName, params: param});
            },
            handleClick(tab, event) {
                this.$refs.ref_detail_num.style.height="3.06rem";
                console.log(this.$refs.el_span)
            },
            calnumFirst(index) {
                return ((index - 1) * 20 + 1);
            },
            calnumEnd(index) {
                if (index === this.wei) {
                    return this.num;
                } else {
                    return ((index - 1) * 20 + 20);
                }
            },
            numarr(){
                let arr=[];
                for(let i=1;i<=this.num;i++){
                    arr.push(i);
                }
                return arr;
            }
        },
    }
</script>

<style scoped>
    .comic_detail_num {
        padding-left: 0.15rem;
    }

    .comic_detail_num .num_top {
        height: .4rem;
        line-height: .4rem;
        padding-right: .15rem;
    }

    .comic_detail_num .num_top span {
        font-size: .14rem;
        color: #FF5267;
        margin-right: .175rem;
    }
    .comic_detail_num .num_click {
        min-height: 2.42rem;       
    }
    .comic_detail_num .num_click ul{
        display: flex;
        flex-wrap: wrap;
        flex-direction: row;
        justify-content: space-around;
        align-items: center;
    }
    .comic_detail_num .num_click li {
        color: #5a5a5a;
        border: .01rem solid #F9F9F9;
        width: .6rem;
        height: .53rem;
        margin-bottom: .06rem;
        background: #F9F9F9;
        text-align: center;
        line-height: .53rem;
        font-size: .14rem;
    }
</style>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个使用 ElementUItabs 标签的实例: ```html <template> <div> <el-tabs v-model="activeTab"> <el-tab-pane label="标签1" name="tab1"></el-tab-pane> <el-tab-pane label="标签2" name="tab2"></el-tab-pane> <el-tab-pane label="标签3" name="tab3"></el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeTab: 'tab1' } } } </script> ``` 这里使用了 `el-tabs` 和 `el-tab-pane` 组件,通过绑定 `v-model` 属性来控制当前激活的标签。 ### 回答2: ElementUI是一款基于Vue.js的组件库,提供了包括tabs标签在内的众多组件。tabs标签是非常常用的一种组件,可以用来切换不同的内容或面。 首先,我们需要在Vue项目中安装和导入ElementUI库,具体方法可查看官方文档。然后,在需要使用tabs标签面中,可以使用以下代码来创建一个简单的tabs标签: ```html <el-tabs v-model="activeTab"> <el-tab-pane label="标签1">标签1的内容</el-tab-pane> <el-tab-pane label="标签2">标签2的内容</el-tab-pane> <el-tab-pane label="标签3">标签3的内容</el-tab-pane> </el-tabs> ``` 其中,v-model指定了当前显示的标签,activeTab为一个变量名,可在Vue中声明。el-tab-pane为每个标签标签,label属性指定标签名,标签的内容在标签中间填写即可。 如果需要添加更多的标签,只需按照以上格式继续添加el-tab-pane即可。同时,ElementUI也提供了丰富的API和样式调整选项,可按需求进行调整和使用。 需要注意的是,tabs标签在移动端可能会显示不完整,此时可以通过el-tabs的属性进行调整,如增加type属性值为border-card、small等: ```html <el-tabs v-model="activeTab" type="border-card" small> …… </el-tabs> ``` 总的来说,ElementUItabs标签是一个方便实用的组件,能够帮助我们快速实现界面设计中的面切换需求。 ### 回答3: ElementUI 是基于 Vue.js 开发的一套组件库,其中的 Tabs 标签是其常用的组件之一。Tabs 组件可以方便地将内容划分为多个标签,并实现即时切换和动态添加、删除标签的功能。下面将介绍如何使用 ElementUITabs 组件实现标签切换。 首先,需要在 Vue 项目中导入 ElementUI 组件库和样式表。可以在 main.js 中全局引入: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 接下来,在需要使用 Tabs 的组件中引入 Tabs 组件,并在模板中使用 Tabs 组件生成标签菜单和标签内容。Tabs 有两种使用方式:通过直接使用 <el-tabs> 和 <el-tab-pane> 组件生成标签,或通过传入标签配置对象生成标签(建议使用第二种方式)。以下是第二种方式的示例代码: ```html <template> <div> <el-tabs v-model="activeName" closable @tab-remove="handleRemove"> <el-tab-pane v-for="tab in tabs" :key="tab.id" :label="tab.name" :name="tab.id"> <div>{{tab.content}}</div> </el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeName: '1', tabs: [ { id: '1', name: 'Tab 1', content: 'This is the content of tab 1' }, { id: '2', name: 'Tab 2', content: 'This is the content of tab 2' }, { id: '3', name: 'Tab 3', content: 'This is the content of tab 3' } ] } }, methods: { handleRemove(targetName) { const tabs = this.tabs const activeName = this.activeName if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.id === targetName) { const nextTab = tabs[index + 1] || tabs[index - 1] if (nextTab) { activeName = nextTab.id } } }) } this.tabs = tabs.filter(tab => tab.id !== targetName) this.activeName = activeName } } } </script> ``` 在上述代码中,tabs 数组中存储了标签的配置对象,其中 id 用于表示标签的名称,name 用于表示标签的显示名称,content 表示标签的内容。使用 v-for 循环遍历 tabs 数组,生成标签菜单和标签内容。 Tabs 组件的 v-model 属性用于绑定当前激活的标签名称,通过设置 activeName 数据实现改变激活标签。closable 属性设置选项卡是否可关闭,@tab-remove 监听选项卡关闭的事件并调用 handleRemove 方法进行处理。其中,handleRemove 方法的逻辑是:如果关闭的是当前激活的标签,则显示下一个标签的内容,如果没有下一个标签,则显示前一个标签的内容。处理完后,更新 tabs 数组和 activeName 数据,实现即时切换和动态添加、删除标签的功能。 除了上述功能,ElementUITabs 组件还提供了多种样式、位置和尺寸的配置选项,可以根据实际需求进行调整。使用 ElementUITabs 组件可以方便地实现标签切换,提升用户体验和应用交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值