|
@@ -0,0 +1,164 @@
|
|
|
+<!-- @format -->
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { Swiper, SwiperSlide } from 'swiper/vue'
|
|
|
+import { Autoplay, EffectCards, Navigation, Pagination } from 'swiper/modules'
|
|
|
+import 'swiper/css'
|
|
|
+import 'swiper/css/navigation'
|
|
|
+import 'swiper/css/autoplay'
|
|
|
+import 'swiper/css/pagination'
|
|
|
+// import 'swiper/css/bundle' // 全部css
|
|
|
+const modules = [Navigation, Pagination, EffectCards, Autoplay]
|
|
|
+const swiperVertical = ref<any>(null)
|
|
|
+const swiperHorizontal = ref<any>(null)
|
|
|
+function onVerticalSwiper(swiper: any) {
|
|
|
+ swiperVertical.value = swiper
|
|
|
+}
|
|
|
+function onHorizontalSwiper(swiper: any) {
|
|
|
+ swiperHorizontal.value = swiper
|
|
|
+}
|
|
|
+function onSlideChange(swiper: any) {
|
|
|
+ if (!swiperVertical.value)
|
|
|
+ return
|
|
|
+ swiperVertical.value.slideTo(swiper.realIndex)
|
|
|
+}
|
|
|
+function onSlideChange2(swiper: any) {
|
|
|
+ if (!swiperHorizontal.value)
|
|
|
+ return
|
|
|
+ swiperHorizontal.value.slideTo(swiper.realIndex)
|
|
|
+}
|
|
|
+const list = ref([
|
|
|
+ {
|
|
|
+ title: 'Insight-Driven Creativity111',
|
|
|
+ description:
|
|
|
+ 'We believe creativity should be rooted in real consumer insights. Every idea starts with what the new generation truly wants — we turn those insights into inspiring products.',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'Insight-Driven Creativity22',
|
|
|
+ description:
|
|
|
+ 'We believe creativity should be rooted in real consumer insights. Every idea starts with what the new generation truly wants — we turn those insights into inspiring products.',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'Insight-Driven Creativity333',
|
|
|
+ description:
|
|
|
+ 'We believe creativity should be rooted in real consumer insights. Every idea starts with what the new generation truly wants — we turn those insights into inspiring products.',
|
|
|
+ },
|
|
|
+])
|
|
|
+onUnmounted(() => {
|
|
|
+ if (swiperVertical.value) {
|
|
|
+ swiperVertical.value.destroy()
|
|
|
+ swiperVertical.value = null
|
|
|
+ }
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div class="bg-#EAE5FA">
|
|
|
+ <div class="w-1200-auto">
|
|
|
+ <div class="flex justify-between ">
|
|
|
+ <div class="w-50% block-left flex user-select justify-center items-center pr-100px">
|
|
|
+ <Swiper
|
|
|
+ :modules="modules"
|
|
|
+ mousewheel="false"
|
|
|
+ :loop="true"
|
|
|
+ effect="cards"
|
|
|
+ grab-cursor="true"
|
|
|
+ :autoplay="{
|
|
|
+ delay: 3000,
|
|
|
+ disableOnInteraction: false,
|
|
|
+ pauseOnMouseEnter: true,
|
|
|
+ }"
|
|
|
+ :pagination="{
|
|
|
+ clickable: true,
|
|
|
+ }"
|
|
|
+ class="pos-relative"
|
|
|
+ @slide-change="onSlideChange2"
|
|
|
+ @swiper="onVerticalSwiper"
|
|
|
+ >
|
|
|
+ <SwiperSlide v-for="(item, index) in list" :key="index">
|
|
|
+ Slide {{ index }}
|
|
|
+ </SwiperSlide>
|
|
|
+ </Swiper>
|
|
|
+ </div>
|
|
|
+ <div class="w-50% h-700px pos-relative block-right">
|
|
|
+ <Swiper
|
|
|
+ direction="vertical"
|
|
|
+ :modules="modules"
|
|
|
+ mousewheel="false"
|
|
|
+ :loop="true"
|
|
|
+ :allow-touch-move="false"
|
|
|
+ :pagination="false"
|
|
|
+ class="pos-relative"
|
|
|
+ @swiper="onHorizontalSwiper"
|
|
|
+ >
|
|
|
+ <SwiperSlide v-for="(item, index) in list" :key="index">
|
|
|
+ <div class="text-left user-select">
|
|
|
+ <div class="text-40px fw-800 text-#333 custom-title-font">
|
|
|
+ {{ item.title }}
|
|
|
+ </div>
|
|
|
+ <div class="text-#999 mt-20px lh-24px">
|
|
|
+ {{ item.description }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </SwiperSlide>
|
|
|
+ </Swiper>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.user-select{
|
|
|
+ user-select: none;
|
|
|
+}
|
|
|
+:deep(.block-right) {
|
|
|
+ .swiper {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ .swiper-slide {
|
|
|
+ text-align: center;
|
|
|
+ font-size: 18px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+:deep(.block-left) {
|
|
|
+ .swiper {
|
|
|
+ width: 480px;
|
|
|
+ height: 480px;
|
|
|
+ }
|
|
|
+ .swiper-slide {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ border-radius: 18px;
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ .swiper-pagination{
|
|
|
+ top: unset;
|
|
|
+ bottom: -80px;
|
|
|
+ left: unset;
|
|
|
+ right: -100px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: end;
|
|
|
+ }
|
|
|
+ .swiper-slide:nth-child(1n) {
|
|
|
+ background-color: rgb(206, 17, 17);
|
|
|
+ }
|
|
|
+
|
|
|
+ .swiper-slide:nth-child(2n) {
|
|
|
+ background-color: rgb(0, 140, 255);
|
|
|
+ }
|
|
|
+
|
|
|
+ .swiper-slide:nth-child(3n) {
|
|
|
+ background-color: rgb(10, 184, 111);
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|