index.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <template>
  2. <view v-if="!props.hide" :style="`height: ${props.height}; margin: ${props.margin}; padding: ${props.padding}`">
  3. <view v-if="props.list?.length">
  4. <swiper
  5. class="swiper"
  6. circular
  7. :indicator-dots="props.indicatorDots"
  8. :autoplay="props.autoplay"
  9. :interval="props.interval"
  10. :duration="props.duration"
  11. indicator-active-color="#fff"
  12. >
  13. <swiper-item v-for="(item, index) in list" :key="'swiperItem'+index" :style="`border-radius: ${props.borderRadius};`">
  14. <image
  15. :mode="props.mode"
  16. :src="strType ? item : item[props.imgUrlKey]"
  17. :style="`width: ${props.width}; height: ${props.height};`"
  18. @error="imageError"
  19. @click="emit('click', item)"
  20. ></image>
  21. </swiper-item>
  22. </swiper>
  23. </view>
  24. </view>
  25. </template>
  26. <script setup>
  27. const emit = defineEmits(['click'])
  28. const props = defineProps({
  29. list: { type: Array, default: () => [] },
  30. indicatorDots: { type: Boolean, default: true }, // 是否显示面板指示点
  31. autoplay: { type: Boolean, default: true }, // 是否自动切换
  32. interval: { type: Number, default: 3000 }, // 自动切换时间间隔
  33. duration: { type: Number, default: 500 }, // 滑动动画时长
  34. strType: { type: Boolean, default: true }, // 数组类型或者对象类型
  35. imgUrlKey: { type: String, default: 'src' },
  36. mode: { type: String, default: 'scaleToFill' }, // 图片裁剪、缩放的模式。aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来
  37. hide: { type: Boolean, default: false }, // 隐藏
  38. width: { type: String, default: '100%' },
  39. height: { type: String, default: '150px' },
  40. borderRadius: { type: String, default: '10px' },
  41. borderRadius: { type: String, default: '10px' },
  42. margin: { type: String, default: '10px' },
  43. padding: { type: String, default: '0' },
  44. })
  45. const imageError = (e) => {
  46. console.error('image发生error事件,携带值为' + e?.detail?.errMsg)
  47. }
  48. </script>
  49. <style scoped lang="scss">
  50. </style>