shop-applet/components/cx-navTitle.vue

129 lines
3.1 KiB
Vue
Raw Permalink Normal View History

2023-09-20 17:00:55 +08:00
<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>