<template>
|
|
<view class="waterfall-container">
|
|
<view class="waterfall-columns">
|
|
<!-- 左列 -->
|
|
<view class="waterfall-column">
|
|
<waterfallItem
|
|
v-for="(item, index) in leftColumnData"
|
|
:key="'left_' + index"
|
|
:item="item"
|
|
@click="handleItemClick"
|
|
@like="handleItemLike"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 右列 -->
|
|
<view class="waterfall-column">
|
|
<waterfallItem
|
|
v-for="(item, index) in rightColumnData"
|
|
:key="'right_' + index"
|
|
:item="item"
|
|
@click="handleItemClick"
|
|
@like="handleItemLike"
|
|
/>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import waterfallItem from './waterfallItem.vue'
|
|
|
|
export default {
|
|
components: {
|
|
waterfallItem
|
|
},
|
|
props: {
|
|
list: {
|
|
type: Array,
|
|
default: () => []
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
leftColumnData: [],
|
|
rightColumnData: []
|
|
}
|
|
},
|
|
watch: {
|
|
list: {
|
|
handler(newList) {
|
|
this.distributeItems(newList)
|
|
},
|
|
immediate: true
|
|
}
|
|
},
|
|
methods: {
|
|
// 将数据分配到左右两列
|
|
distributeItems(items) {
|
|
this.leftColumnData = []
|
|
this.rightColumnData = []
|
|
|
|
items.forEach((item, index) => {
|
|
// 简单的奇偶分配,也可以根据内容高度智能分配
|
|
if (index % 2 === 0) {
|
|
this.leftColumnData.push(item)
|
|
} else {
|
|
this.rightColumnData.push(item)
|
|
}
|
|
})
|
|
},
|
|
|
|
// 处理点击事件
|
|
handleItemClick(item) {
|
|
this.$emit('item-click', item)
|
|
},
|
|
|
|
// 处理点赞事件
|
|
handleItemLike(item) {
|
|
this.$emit('item-like', item)
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.waterfall-container {
|
|
padding: 20rpx;
|
|
|
|
.waterfall-columns {
|
|
display: flex;
|
|
gap: 20rpx;
|
|
|
|
.waterfall-column {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
}
|
|
}
|
|
</style>
|