|
|
- <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>
|