mainVisual.vue 2.9 KB

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