更新记录

1.0.2(2024-11-20) 下载此版本

  1. 优化dom问题判断

1.0.1(2024-11-18) 下载此版本

  1. 优化
属性 说明 类型 默认值 可选值
backTopShow 返回顶部 Boolean true true/false
scrollwithanimation scroll-view (scroll-with-animation) Boolean true true/false
isnextpage 是否已是最后一页 Boolean false true/false
imgSrc 列表中图片字段 String src (与列表中图片字段对应) ---
方法 说明 接收值
backTop 返回顶部 (使用ref方式调用) val (true 初始化数据)
Init 数据处理渲染(使用ref方式调用) arr (列表包含图片)
scroll 滚动事件 scrollTop (当前滚动的距离)
scrolltolower 触底事件 ---
插槽 说明 接收值
top 列表上方的内容 ---
bottom 列表下方的内容 ---
Backtotop 自定义返回顶部样式 ---
left 列表左侧循环渲染的内容 item
right 列表右侧循环渲染的内容 item

1.0.0(2024-11-13) 下载此版本

瀑布流

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 4.24 × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

实现思路

  • 布局采用左右风格的方式,图片采用宽度固定自适应高度
  • 接收到显示的数组循环获取左右的高度对比下一个插入左或右
  • 提供左右插槽可自定义布局,传出当前循环的值与下标
  • 提供触底事件与返回顶部事件
  • 在滚动过程中隐藏不需要显示的数据以减少微信小程序dom的消耗
  • 优化
    • 获取元素高度更改为获取图片高度

示例

属性 说明 类型 默认值 可选值
backTopShow 返回顶部 Boolean true true/false
scrollwithanimation scroll-view (scroll-with-animation) Boolean true true/false
isnextpage 是否已是最后一页 Boolean false true/false
imgSrc 列表中图片字段 String src (与列表中图片字段对应) ---
方法 说明 接收值
backTop 返回顶部 (使用ref方式调用) val (true 初始化数据)
Init 数据处理渲染(使用ref方式调用) arr (列表包含图片)
scroll 滚动事件 scrollTop (当前滚动的距离)
scrolltolower 触底事件 ---
插槽 说明 接收值
top 列表上方的内容 ---
bottom 列表下方的内容 ---
Backtotop 自定义返回顶部样式 ---
left 列表左侧循环渲染的内容 item
right 列表右侧循环渲染的内容 item
<template>
    <view style="width: 100vw;height: 100vh;background-color: #ccc;">
        <newCompentVue :isnextpage="true" imgSrc="productDisplayImg" @scrolltolower="scrolltolower" ref="leftright">
            <template v-slot:left="{item,index}">
                <view style="margin: 0 12rpx 24rpx 24rpx;background-color: white;">
                    <image style="width: 100%;display: block;" :src="item.productDisplayImg" mode="widthFix"></image>
                    <view>{{item.productName}}</view>
                </view>
            </template>
            <template v-slot:right="{item,index}">
                <view style="margin: 0 24rpx 24rpx 12rpx;background-color: white;">
                    <image style="width: 100%;display: block;" :src="item.productDisplayImg" mode="widthFix"></image>
                    <view>{{item.productName}}</view>
                </view>
            </template>
            <template v-slot:top>
                top
            </template>
            <template v-slot:bottom>
                bottom
            </template>
        </newCompentVue>
    </view>
</template>

<script>
    import newCompentVue from '../Component/newCompent.vue'
    export default {
        components: {
            newCompentVue
        },
        data() {
            return {
                arrList: [{
                        productDisplayImg: "../../static/1.jpg",
                        productName: '啊实打实大苏打实打实的'
                    },
                    {
                        productDisplayImg: "../../static/2.jpg",
                        productName: '123'
                    },
                    {
                        productDisplayImg: "../../static/logo.png",
                        productName: 'vvvvv'
                    }
                ],
                tempList: []
            }
        },
        async onLoad() {
            var d = [...this.arrList];
            for (let i = 0; i < 3; i++) {
                this.arrList = [...this.arrList, ...d]
            }
            this.arrList = [...this.arrList, {
                productDisplayImg: "../../static/1.jpg",
                productName: 'kasdkas'
            }]
            this.arrList = [...this.arrList, {
                productDisplayImg: "../../static/1.jpg",
                productName: '阿三大苏打啥话都说'
            }]

            this.tempList = [...this.arrList]

            this.$nextTick(() => {
                this.$refs.leftright.Init(this.arrList)
            })

        },
        methods: {
            // isnextpage true   不触发
            scrolltolower() {
                this.$nextTick(() => {
                    // this.$refs.leftright.Init(this.tempList)
                })
            }
        }
    }
</script>

<style>

</style>

源代码

微信小程序瀑布流组件

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问