mainSwiperLincoln.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div class="main--swiper--wrap">
  3. <swiper
  4. :modules="[EffectFade]"
  5. :slides-per-view="1"
  6. :space-between="0"
  7. :speed="300"
  8. effect="fade"
  9. :fadeEffect="{ crossFade: true }"
  10. @swiper="onSwiper"
  11. @slideChange="onSlideChange"
  12. class="main--swiper"
  13. >
  14. <swiper-slide v-for="(slide, index) in slides" :key="index">
  15. <div class="slide--content">
  16. <div class="img--wrap">
  17. <video v-if="slide.type === 'video'" muted loop autoplay playsinline>
  18. <source :src="slide.video" type="video/mp4">
  19. </video>
  20. <img v-else :src="slide.image" :alt="slide.title" />
  21. </div>
  22. <div class="title--wrap" v-if="slide.title">
  23. <h2>{{ slide.title }}</h2>
  24. <p v-html="slide.subTitle"></p>
  25. <div class="btn--wrap">
  26. <NuxtLink class="btn--white" to="/lincoln/network">시승 신청</NuxtLink>
  27. <NuxtLink class="btn--orange" :to="slide.href">제품 정보 보기</NuxtLink>
  28. </div>
  29. </div>
  30. </div>
  31. </swiper-slide>
  32. </swiper>
  33. <div class="swiper--pagination--custom">
  34. <div
  35. v-for="(slide, index) in slides"
  36. :key="index"
  37. class="pagination--item"
  38. :class="{ active: currentIndex === index }"
  39. @click="goToSlide(index)"
  40. >
  41. <h2 v-html="slide.pagingTitle"></h2>
  42. </div>
  43. </div>
  44. </div>
  45. </template>
  46. <script setup>
  47. import { ref, computed, onMounted, onUnmounted } from "vue";
  48. import { Swiper, SwiperSlide } from "swiper/vue";
  49. import { EffectFade } from "swiper/modules";
  50. import "swiper/css";
  51. import "swiper/css/effect-fade";
  52. const isMobile = ref(false);
  53. const checkMobile = () => {
  54. isMobile.value = window.innerWidth <= 768;
  55. };
  56. onMounted(() => {
  57. checkMobile();
  58. window.addEventListener("resize", checkMobile);
  59. });
  60. onUnmounted(() => {
  61. window.removeEventListener("resize", checkMobile);
  62. });
  63. const slides = computed(() => [
  64. // {
  65. // type: "video",
  66. // title: "",
  67. // subTitle: "",
  68. // href: "",
  69. // pagingTitle: "NAUTILUS",
  70. // video: "/img/main--lincoln--visual.mp4",
  71. // },
  72. {
  73. title: "",
  74. subTitle: "",
  75. href: "",
  76. pagingTitle: "NAUTILUS",
  77. image: isMobile.value
  78. ? "/img/main--nautilus--visual3--mo.jpg"
  79. : "/img/main--nautilus--visual3.jpg",
  80. },
  81. {
  82. title: "THE NEW LINCOLN NAVIGATOR",
  83. subTitle: "EXPERIENCE OF A PACKAGE ADVANCED TECHNOLOGIES",
  84. href: "/lincoln/vehicle/navigator",
  85. pagingTitle: "NAVIGATOR",
  86. image: isMobile.value
  87. ? "/img/main--lincoln--visual1--mo.png"
  88. : "/img/main--lincoln--visual1.png",
  89. },
  90. {
  91. title: "THE NEW LINCOLN AVIATOR",
  92. subTitle: "Way To The Shipped Exit",
  93. href: "/lincoln/vehicle/aviator",
  94. pagingTitle: "AVIATOR",
  95. image: isMobile.value
  96. ? "/img/main--lincoln--visual2--mo.png"
  97. : "/img/main--lincoln--visual2.png",
  98. },
  99. ]);
  100. const swiperInstance = ref(null);
  101. const currentIndex = ref(0);
  102. const onSwiper = (swiper) => {
  103. swiperInstance.value = swiper;
  104. };
  105. const onSlideChange = (swiper) => {
  106. currentIndex.value = swiper.activeIndex;
  107. };
  108. const goToSlide = (index) => {
  109. if (swiperInstance.value) {
  110. swiperInstance.value.slideTo(index);
  111. }
  112. };
  113. </script>