123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <!-- @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>
|