更新记录

0.1.0(2021-08-05)

第一版,估计在许多细节还有应用场景上还是有问题,目前只是在一个demo项目中使用了,如果您在使用中发现问题,还请反馈下,谢谢!


平台兼容性

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

前言

有些需求需要展示长列表,无限下拉都会一直显示出更多的数据。但是当一个页面展示的DOM节点过多的时候,会造成页面的卡顿严重的会直接白屏。
巧了,自己正好碰到了这方面的需求(微信小程序端),从插件市场找了下类似需求的插件,使用后,发现加载图片时会有严重的闪屏现象(重新渲染图片造成),然后暂时没发现其他可以用的插件(不是说插件市场没有啊,只是我暂时没搜到),然后恰巧又搜到了这篇文章【小程序长列表渲染优化另一种解决方案】
emmm,反正有实例代码,那就自己造个轮子吧,正好学习一下😄

性能不一定最好,但是恰好能满足我的需求,然后就分享给大家了,大家如果有什么更好的优化方法,还请不吝赐教;Nvue用原生的list性能应该会更好。

原理

以屏为单位,只渲染屏幕前后两屏的数据,不渲染的屏数用空白div占位。

渲染截图

特色❤️

  • 图片不闪屏(应该不闪,目前我只测试了小程序端&&我提前设定了图片高度)
  • 单块高度不需要统一

使用方法

在页面中使用

<uce-flatlist :windowHeight="screenHeight" @top="handleTop" @load="handleLoad" ref="flatlist" :customStyle="customStyle" @itemClick="itemClick">
    <template v-slot:default="{data,index}">
        <!-- 这里写自己的块内容就好 -->
        <view class="box">
            <view class="thumb">
                <u-image width="100%" height="788rpx" :src="data.content" mode="widthFix"></u-image>
            </view>
            <view class="play-bar">
                <u-image width="100%" height="84rpx" src="@/static/demo/play-bar.png" mode="widthFix"></u-image>
            </view>
        </view>
    </template>
</uce-flatlist>

文档

1. Props

参数 说明 类型 默认 可选
customStyle 容器自定义样式 Object - -
windowHeight list区域高度 Number 300 -

2. Events

参数 说明
load 加载数据,滚动到底部触发
top 滚动到顶部触发
itemClick 内容块点击后触发

3.载入数据

this.$refs.flatlist.setListData(data)

提示!!此处注入的数据为渲染为”一页“的数据,数据量不宜太大,可以自己通过load来自己控制分页

genMockData() {
    let temp = [] let count = 3
    while (count--) {
        temp.push({
            idx: "1",
            content: yu_wen
        }) temp.push({
            idx: "2",
            content: shu_xue
        }) temp.push({
            idx: "3",
            content: ying_yu
        })
    }
    this.$refs.flatlist.setListData(temp)
},
//滚动触顶
handleTop() {},
//滚动触底
handleLoad() {
    this.genMockData()
},
// 页面数据初始化函数
init(options) {
    this.genMockData()
},

4.重置数据

this.$refs.flatlist.reset()

隐私、权限声明

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

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

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

许可协议

MIT协议

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