swiperIndex.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <!--swiper轮播-->
  2. <script setup lang="ts">
  3. import { toRefs } from 'vue'
  4. import { Swiper, SwiperSlide } from 'swiper/vue'
  5. import type SwiperClass from 'swiper'
  6. import 'swiper/css'
  7. import 'swiper/css/pagination'
  8. import 'swiper/css/navigation'
  9. import { Keyboard, Navigation, Pagination } from 'swiper'
  10. const props = defineProps({
  11. //列表数据 swiperImage
  12. swiperSlideList: {
  13. type: Array,
  14. default: [],
  15. },
  16. swiperData: {
  17. type: Object,
  18. default: null,
  19. },
  20. })
  21. const { swiperSlideList, swiperData } = toRefs(props)
  22. let swiperRef: SwiperClass | null = null
  23. const setSwiperRef = (swiper: SwiperClass) => {
  24. swiperRef = swiper
  25. }
  26. //跳到指定位置
  27. const slideTo = (index: number) => {
  28. swiperRef?.slideTo(index - 1, 0)
  29. }
  30. defineExpose({ slideTo })
  31. </script>
  32. <template>
  33. <div class="swiper" :style="swiperData.boxPadding">
  34. <swiper
  35. :space-between="swiperData.spaceBetween"
  36. :slides-per-view="swiperData.slidesPerView"
  37. :modules="swiperData.modules"
  38. @swiper="setSwiperRef"
  39. :navigation="{
  40. nextEl: '.swiper-button-next',
  41. prevEl: '.swiper-button-prev',
  42. }"
  43. :pagination="{ clickable: true, el: '.swiper-pagination'}"
  44. class="swiper h-100% proList acea-row"
  45. >
  46. <swiper-slide v-for="(item, index) in swiperSlideList" :key="index" class="h-100%" :class="swiperData.slideWidth">
  47. <slot
  48. :value="{
  49. swiperItem: item,
  50. swiperIndex: index,
  51. }"
  52. ></slot>
  53. </swiper-slide>
  54. </swiper>
  55. <div class="swiper-button-prev iconfont icon-zuo1 text-center" :style="swiperData.navigationBgColor+';'+ swiperData.navigationColor" slot="button-prev"></div>
  56. <div class="swiper-button-next iconfont icon-you1 text-center" :style="swiperData.navigationBgColor+';'+ swiperData.navigationColor" slot="button-prev"></div>
  57. <div class="swiper-pagination"></div>
  58. </div>
  59. </template>
  60. <style scoped lang="scss">
  61. .swiper-button-prev:after,
  62. .swiper-button-next:after {
  63. display: none !important;
  64. }
  65. .swiper-button-prev {
  66. text-align: center;
  67. width: 30px;
  68. height: 42px;
  69. //background: rgba(0, 0, 0, 0.3);
  70. border-radius: 0px 23px 23px 0px;
  71. // color: #fff;
  72. margin-left: -10px;
  73. }
  74. .swiper-button-next {
  75. text-align: center;
  76. width: 30px;
  77. height: 40px;
  78. // background: rgba(0, 0, 0, 0.3);
  79. border-radius: 23px 0 0 23px;
  80. // color: #fff;
  81. margin-right: -9px;
  82. }
  83. </style>