|
@@ -22,15 +22,13 @@
|
|
|
@animationfinish="onAnimationfinish"
|
|
|
>
|
|
|
<swiper-item v-for="(item, index1) in mapList" :key="index1">
|
|
|
- <view class="swiper__item">
|
|
|
+ <view class="swiper__item" :style="layoutStyle">
|
|
|
<template v-if="item.length">
|
|
|
- <view v-for="(data, index2) in item" :key="index2">
|
|
|
+ <view v-for="(data, index2) in item" class="grid" :key="index2">
|
|
|
<slot :row="data" name="slide"></slot>
|
|
|
</view>
|
|
|
</template>
|
|
|
- <template v-else>
|
|
|
- <view> <slot name="slide" :item="item"></slot> </view>
|
|
|
- </template>
|
|
|
+ <view v-else class="grid"><slot name="slide" :row="item"></slot></view>
|
|
|
</view>
|
|
|
</swiper-item>
|
|
|
</swiper>
|
|
@@ -50,18 +48,30 @@ export default {
|
|
|
default: () => []
|
|
|
},
|
|
|
// 行数
|
|
|
- perview: {
|
|
|
+ rows: {
|
|
|
type: Number,
|
|
|
default: 1
|
|
|
},
|
|
|
// 列数
|
|
|
- column: {
|
|
|
+ columns: {
|
|
|
type: Number,
|
|
|
default: 1
|
|
|
},
|
|
|
swiperHeight: {
|
|
|
type: Number,
|
|
|
default: 350
|
|
|
+ },
|
|
|
+ gapX: {
|
|
|
+ type: Number,
|
|
|
+ default: 0
|
|
|
+ },
|
|
|
+ gapY: {
|
|
|
+ type: Number,
|
|
|
+ default: 0
|
|
|
+ },
|
|
|
+ padding: {
|
|
|
+ type: String,
|
|
|
+ default: '0'
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -73,7 +83,7 @@ export default {
|
|
|
},
|
|
|
// 宽
|
|
|
width() {
|
|
|
- return 100 / this.column + '%'
|
|
|
+ return 100 / this.columns + '%'
|
|
|
},
|
|
|
dotsStyles() {
|
|
|
return {
|
|
@@ -85,13 +95,23 @@ export default {
|
|
|
selectedBackgroundColor: '#FF457B',
|
|
|
selectedBorder: '#FF457B'
|
|
|
}
|
|
|
+ },
|
|
|
+ layoutStyle() {
|
|
|
+ return `
|
|
|
+ display: grid;
|
|
|
+ padding: ${this.padding};
|
|
|
+ grid-template-columns: repeat(${this.columns}, 1fr);
|
|
|
+ grid-template-rows: repeat(${this.rows}, 1fr);
|
|
|
+ grid-column-gap: ${this.gapX}rpx;
|
|
|
+ grid-row-gap: ${this.gapX}rpx;
|
|
|
+ `
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
// 处理轮播图数据列表
|
|
|
formatSwiperList(list = []) {
|
|
|
const result = []
|
|
|
- const count = this.perview * this.column
|
|
|
+ const count = this.rows * this.columns
|
|
|
// 一屏仅有一个时
|
|
|
if (count === 1) {
|
|
|
return list
|
|
@@ -120,16 +140,8 @@ export default {
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.simple-swiper {
|
|
|
- .swiper {
|
|
|
- width: 100%;
|
|
|
- }
|
|
|
- .swiper__item {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
- flex-wrap: wrap;
|
|
|
- margin: 0 24rpx;
|
|
|
- }
|
|
|
+.grid {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
}
|
|
|
</style>
|