index.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <main>
  3. <div class="main--visual--wrap">
  4. <div class="main--swiper--wrap">
  5. <swiper
  6. ref="mainSwiperRef"
  7. :pagination="{
  8. type: 'progressbar',
  9. }"
  10. :navigation="true"
  11. :autoplay="{
  12. delay: 3000,
  13. disableOnInteraction: false,
  14. }"
  15. :modules="modules"
  16. class="main--swiper"
  17. @swiper="onSwiper"
  18. >
  19. <swiper-slide class="visual--img">
  20. <div class="img--wrap"><img src="/img/main1.png" /></div>
  21. </swiper-slide>
  22. <swiper-slide class="visual--img">
  23. <div class="img--wrap"><img src="/img/main2.png" /></div>
  24. </swiper-slide>
  25. <swiper-slide class="visual--img">
  26. <div class="img--wrap"><img src="/img/main3.png" /></div>
  27. </swiper-slide>
  28. </swiper>
  29. <!-- 커스텀 컨트롤 -->
  30. <div class="swiper-controls">
  31. <div class="pagination-info">
  32. <span class="current-slide">{{ currentSlide }}</span> / {{ totalSlides }}
  33. </div>
  34. <div class="control-buttons">
  35. <button @click="toggleAutoplay" class="play-pause-btn">
  36. {{ isPlaying ? '⏸️' : '▶️' }} ?
  37. </button>
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. </main>
  43. </template>
  44. <script setup>
  45. import { ref, onMounted } from 'vue'
  46. import { Swiper, SwiperSlide } from 'swiper/vue';
  47. import { Navigation, Pagination, Autoplay } from 'swiper/modules';
  48. import 'swiper/css';
  49. import 'swiper/css/navigation';
  50. import 'swiper/css/pagination';
  51. const mainSwiperRef = ref(null)
  52. const swiperInstance = ref(null)
  53. const currentSlide = ref(1)
  54. const totalSlides = ref(0)
  55. const isPlaying = ref(true)
  56. const modules = [Navigation, Pagination, Autoplay]
  57. const onSwiper = (swiper) => {
  58. swiperInstance.value = swiper
  59. totalSlides.value = swiper.slides.length
  60. swiper.on('slideChange', () => {
  61. currentSlide.value = swiper.activeIndex + 1
  62. })
  63. }
  64. const toggleAutoplay = () => {
  65. if (swiperInstance.value) {
  66. if (isPlaying.value) {
  67. swiperInstance.value.autoplay.stop()
  68. } else {
  69. swiperInstance.value.autoplay.start()
  70. }
  71. isPlaying.value = !isPlaying.value
  72. }
  73. }
  74. </script>