You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

250 lines
6.0 KiB

<template>
<section :class="['tw-relative tw-mt-[30px] tw-overflow-hidden']">
<div class="swiper-container relatedService tw-mx-auto tw-max-w-full tw-overflow-hidden" ref="relatedService">
<div :class="['swiper-wrapper tw-z-0']">
<button :class="[
'swiper-slide tw-w-fit tw-body-4 tw-border tw-border-solid tw-border-neutral-700 tw-rounded-[12px] tw-px-[16px] tw-py-[10px] md:tw-body-3',
categoryid == 0 ? 'active' : '',
]" @click="getAll()">{{ $t('service.All') }}
</button>
<button :class="[
'swiper-slide tw-w-fit tw-body-4 tw-border tw-border-solid tw-border-neutral-700 tw-rounded-[12px] tw-px-[16px] tw-py-[10px] tw-whitespace-nowrap md:tw-body-3',
categoryid == item.ids[0] ? 'active' : '',
]" v-for="(item, index) in getCategory" :key="index" @click="getCategoryId(item.ids[0])">
{{ item.lang_text }}
</button>
</div>
<div :class="['whitelinear tw-absolute tw-z-10 tw-mt-[-43px] tw-right-0']"></div>
<div :class="[
'swiper-button-prev rs',
relatedServiceSwiper ? 'md:tw-block' : '',
]"></div>
<div :class="[
'swiper-button-next rs',
relatedServiceSwiper ? 'md:tw-block' : '',
]"></div>
</div>
</section>
</template>
<script>
import { $ } from "dom7";
import Swiper from "swiper/bundle";
export default {
components: {
Swiper,
},
data() {
return {
relatedServiceSwiper: null,
categoryName: "",
categoryid: 0,
};
},
props: {
getCategory: {
type: Array,
},
},
mounted() {
let vm = this;
vm.$nextTick(function () {
vm.relatedServiceSwiper = new Swiper(".swiper-container.relatedService", {
direction: "horizontal",
initialSlide: 0, //slide的索引值,從第0筆開始顯示
slidesPerView: "auto", //顯示的slides数量
slidesPerGroup: 4, //每次slide的數量
observer: true, //修改swiper自己或子元素时,自动初始化swiper
observeParents: true, //修改swiper的父元素时,自动初始化swiper
spaceBetween: 10,
slideToClickedSlide: true,
navigation: {
nextEl: ".swiper-button-next.rs",
prevEl: ".swiper-button-prev.rs",
},
breakpoints: {
768: {
spaceBetween: 12,
},
},
});
});
},
methods: {
getCategoryId(data) {
this.categoryid = data;
this.$emit("test", this.categoryid);
this.$emit("categoryid", `/service?category=${this.categoryid}`);
},
getAll() {
this.categoryid = 0;
this.$emit("getAllServiceList");
this.$emit("categoryid", `/service`);
},
test() {
if (this.activeIndex == this.categoryid) {
return true;
}
},
},
};
</script>
<style lang="scss" scoped>
.swiper-container {
width: 100% !important;
}
.swiper-slide {
color: #696969;
background-color: white;
}
.active {
background-color: #757575;
color: #fefefe;
}
.swiper-button {
// &-prev.rs {
// z-index: 4;
// text-align: center;
// height: 45px;
// width: 45px;
// background-image: url("~/assets/svg/relatedServiceArrow.svg");
// background-size: 100%;
// transform: rotate(180deg);
// background-repeat: no-repeat;
// // &:focus-visible,
// // &:focus {
// // outline: none;
// // }
// &::after {
// text-align: center;
// color: transparent;
// // background-image: url("~/assets/svg/relatedServiceArrow.svg");
// background-position: center;
// height: 45px;
// width: 45px;
// background-repeat: no-repeat;
// background-size: 100%;
// }
// }
// &-next.rs {
// z-index: 9;
// text-align: center;
// height: 45px;
// width: 45px;
// background-image: url("~/assets/svg/relatedServiceArrow.svg");
// background-size: 100%;
// background-repeat: no-repeat;
// // position: relative;
// &::after {
// text-align: center;
// color: transparent;
// // background-image: url("~/assets/svg/relatedServiceArrow.svg");
// background-position: center;
// background-repeat: no-repeat;
// background-size: cover;
// }
// }
}
.swiper-button {
&-prev.rs {
left: 0;
&::before {
content: "";
display: block;
width: 60px;
height: 100%;
background-image: url("~/assets/svg/swiper_linear.svg");
// background-image: linear-gradient(to left, transparent, #fff);
position: absolute;
left: 0;
top: -4px;
z-index: -1;
transform: rotate(180deg);
@media screen and (min-width: 1366px) {
width: 56px;
}
}
&:after {
content: "";
display: block;
position: absolute;
top: 6px;
right: -6px;
background-image: url("~/assets/svg/relatedServiceArrow.svg");
background-position: center;
background-repeat: no-repeat;
background-size: 32px;
transform: rotate(180deg);
width: 32px;
height: 32px;
}
}
&-next.rs {
right: 0;
&::before {
content: "";
display: block;
width: 60px;
height: 100%;
background-image: url("~/assets/svg/swiper_linear.svg");
// background-image: linear-gradient(to right, transparent, #fff);
position: absolute;
right: 0;
top: 4px;
z-index: -1;
@media screen and (min-width: 1366px) {
width: 56px;
}
}
&:after {
content: "";
display: block;
position: absolute;
top: 6px;
left: -6px;
background-image: url("~/assets/svg/relatedServiceArrow.svg");
background-position: center;
background-repeat: no-repeat;
background-size: 32px;
width: 32px;
height: 32px;
}
}
}
:deep(.swiper-container) {
.swiper-slide {
display: flex;
}
[aria-disabled="true"] {
opacity: 0;
&::after {
pointer-events: none;
}
&::before {
pointer-events: none;
}
}
}
</style>