129 lines
3.1 KiB
Vue
129 lines
3.1 KiB
Vue
<template>
|
||
<!-- tab选项卡滑动切换 -->
|
||
<view class="my-tab" ref="myTabRef">
|
||
<view class="my-tab-item" v-for="(item, index) in tabs" :ref="`tab${item.name}Ref`"
|
||
:class="{ active: item.name === activeItem }" :key="index">
|
||
<view class="my-tab-text" ref="tabName" @click="tabClick(item,index)">
|
||
<view class="name">{{ item.label }}</view>
|
||
<view class="xian" v-if='isshow'></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
/*
|
||
tabs -- 传入标签名 array类型 : tabs: [{name: "tabOne",label: "全部"},{...}]
|
||
activeItem -- 默认第一个class名 string
|
||
@tabClick -- 自定义点击事件 回传用到 做逻辑判断
|
||
标签大小、默认颜色、选中颜色,下边框线等样式,已在css中注释,请根据注释修改即可
|
||
*/
|
||
export default {
|
||
name: "cx-navTitle",
|
||
props: {
|
||
tabs: { //所有标签名
|
||
type: Array,
|
||
default: []
|
||
},
|
||
activeItem: { //默认第一个 选中的class类名
|
||
type: String,
|
||
default: ''
|
||
},
|
||
show: {
|
||
type: Boolean,
|
||
default: ''
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
isshow: true,
|
||
};
|
||
},
|
||
mounted() {
|
||
this.isshow = this.show
|
||
},
|
||
methods: {
|
||
// tab点击
|
||
tabClick(item, index) {
|
||
this.$emit('tabClick', item) //回传数据
|
||
// 触发滑动方法
|
||
this.scrollLeftTo(item.name);
|
||
},
|
||
// 滑动
|
||
scrollLeftTo(name) {
|
||
const ref = `tab${name}Ref`;
|
||
// 获取myTabRef的DOM元素,即类名为my-tab的标签
|
||
const nav = this.$refs.myTabRef.$el;
|
||
// 获取当前点击的某一个tab的的DOM元素,即类名为my-tab-item的标签
|
||
const title = this.$refs[ref][0].$el;
|
||
// 计算位移偏差
|
||
// #ifdef H5
|
||
const to = title.offsetLeft - (nav.offsetWidth - title.offsetWidth) / 2;
|
||
nav.scrollLeft = to;
|
||
// #endif
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.my-tab {
|
||
width: 720rpx;
|
||
margin: 0 auto;
|
||
// height:80rpx;
|
||
// background: #ffffff;
|
||
// line-height:80rpx;
|
||
// border:1px solid red;
|
||
display: flex;
|
||
overflow-x: scroll;
|
||
padding-right: 0rpx;
|
||
scroll-behavior: smooth; //平稳的滑动效果
|
||
font-size: 32rpx;
|
||
font-family: PingFang-SC-Heavy;
|
||
|
||
.my-tab-item {
|
||
padding: 20rpx 35rpx; //标签上下左右距离 -- 在这里改
|
||
color: #707070; //标签默认颜色 -- 在这里改
|
||
// height: 0rpx;
|
||
text-align: center;
|
||
flex: 1 0 auto;
|
||
|
||
&.active {
|
||
color: #333333; //标签选中颜色 -- 在这里改
|
||
font-family: PingFang-SC-Heavy;
|
||
font-weight: 600;
|
||
position: relative;
|
||
|
||
.my-tab-text {
|
||
.xian {
|
||
position: relative;
|
||
top: 0rpx; //下边框线和标签距离 -- 在这里改
|
||
z-index: 8;
|
||
width: 26px;
|
||
margin: 0 auto;
|
||
border: 1rpx solid #F84221; //标签底部下边框线 -- 在这里改
|
||
border-radius: 50rpx;
|
||
padding: 0rpx 30rpx;
|
||
opacity: 0.6; //下边框线透明度 -- 在这里改
|
||
}
|
||
|
||
.name {
|
||
position: relative;
|
||
z-index: 9;
|
||
font-size: 32rpx;
|
||
font-family: PingFang SC;
|
||
font-weight: 500;
|
||
color: #F84221;
|
||
color: #F84221;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 隐藏滚动条
|
||
::-webkit-scrollbar {
|
||
height: 0;
|
||
width: 0;
|
||
color: transparent;
|
||
}
|
||
</style> |