index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. el: '.swiper--pagination'
  10. }"
  11. :navigation="{
  12. nextEl: '.swiper--btn--next',
  13. prevEl: '.swiper--btn--prev'
  14. }"
  15. :modules="modules"
  16. class="main--swiper"
  17. loop="true"
  18. @swiper="onSwiper"
  19. >
  20. <!-- :autoplay="{
  21. delay: 3000,
  22. disableOnInteraction: false,
  23. }" -->
  24. <swiper-slide class="visual--img">
  25. <div class="txt--wrap"><h2>친환경산업의 미래를 선도하는 <br>그린웨일글로벌</h2></div>
  26. <div class="img--wrap"><img src="/img/main1.png" /></div>
  27. </swiper-slide>
  28. <swiper-slide class="visual--img">
  29. <div class="txt--wrap"><h2>친환경산업의 미래를 선도하는 <br>그린웨일글로벌</h2></div>
  30. <div class="img--wrap"><img src="/img/main2.png" /></div>
  31. </swiper-slide>
  32. <swiper-slide class="visual--img">
  33. <div class="txt--wrap"><h2>친환경산업의 미래를 선도하는 <br>그린웨일글로벌</h2></div>
  34. <div class="img--wrap"><img src="/img/main3.png" /></div>
  35. </swiper-slide>
  36. </swiper>
  37. <div class="swiper--control--wrap">
  38. <div class="pagination--wrap">
  39. <span class="current">{{ currentSlide }}</span>
  40. <span class="bar"></span>
  41. <span class="total">{{ totalSlides }}</span>
  42. </div>
  43. <div class="swiper--pagination"></div>
  44. <div class="swiper--btn--wrap">
  45. <div class="swiper--btn--prev"></div>
  46. <button @click="toggleAutoplay" :class="['play--btn', { 'pause': !isPlaying }]">
  47. </button>
  48. <div class="swiper--btn--next"></div>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </main>
  54. </template>
  55. <script setup>
  56. import { ref, onMounted } from 'vue'
  57. import { Swiper, SwiperSlide } from 'swiper/vue';
  58. import { Navigation, Pagination, Autoplay } from 'swiper/modules';
  59. import 'swiper/css';
  60. import 'swiper/css/navigation';
  61. import 'swiper/css/pagination';
  62. const mainSwiperRef = ref(null)
  63. const swiperInstance = ref(null)
  64. const currentSlide = ref(1)
  65. const totalSlides = ref(0)
  66. const isPlaying = ref(true)
  67. const modules = [Navigation, Pagination, Autoplay]
  68. const onSwiper = (swiper) => {
  69. swiperInstance.value = swiper
  70. totalSlides.value = 3 // 실제 슬라이드 개수
  71. swiper.on('slideChange', () => {
  72. currentSlide.value = swiper.realIndex + 1
  73. })
  74. }
  75. const toggleAutoplay = () => {
  76. if (swiperInstance.value) {
  77. if (isPlaying.value) {
  78. swiperInstance.value.autoplay.stop()
  79. } else {
  80. swiperInstance.value.autoplay.start()
  81. }
  82. isPlaying.value = !isPlaying.value
  83. }
  84. }
  85. </script>