上一篇
const calculateColumns = () => { wrapperWidth.value = waterfallWrapper.value.clientWidth; cols.value = Math.floor(wrapperWidth.value / (colWidth.value + props.gap)); };
const calculateLayout = () => { const columnHeights = new Array(cols.value).fill(0); items.forEach((item) => { const minColIndex = columnHeights.indexOf(Math.min(...columnHeights)); item.style.transform = `translate3d(${minColIndex * (colWidth.value + props.gap)}px, ${columnHeights[minColIndex]}px, 0)`; columnHeights[minColIndex] += item.offsetHeight + props.gap; }); };
.container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-auto-rows: 10px; gap: 10px; } .item { grid-row-end: span var(--row-span, 1); }
@media (max-width: 768px) { .item { width: 50%; } } @media (max-width: 480px) { .item { width: 100%; } }
pnpm add v3-waterfall
<template> <v3-waterfall :list="list" @scrollReachBottom="loadMore"> <template #default="{ item }"> div class="card"> <img :src="item.cover" /> h3>{{ item.title }}</h3> </div> </template> </v3-waterfall> </template>
npm install vue3-waterfall
<vue3-waterfall :column-count="3" :gap="20" :transition-class="fade-in" />
npm install vue-waterfall-easy
<vue-waterfall-easy :imgs-arr="images" @scrollLoadImg="fetchMore" />
<img v-if="item.cover" :src="item.cover" data-key="cover" class="cover" />
.card { transition: all 0.3s ease; &:hover { transform: translateY(-5px); } }
<template #default="{ item }"> <div v-if="item.type === 'image'" class="image-card"> <img :src="item.url" /> </div> <div v-else-if="item.type === 'text'" class="text-card"> <h3>{{ item.title }}</h3> <p>{{ item.content }}</p> </div> </template>
组件选择
v3-waterfall
:功能全面、更新活跃,支持虚拟列表与头部插入。 vue3-waterfall
:简单高效,适合快速集成。 响应式策略
auto-fill
实现灵活列数。 性能优化
debounce
减少窗口resize事件的计算频率。 通过以上技术方案,可实现一个高效、优雅且适应多端的Vue瀑布流布局,让“多彩时光”的展示更加生动! 🌈
本文由 业务大全 于2025-08-26发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://xdh.7tqx.com/wenda/740626.html
发表评论