随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 80424

<list>

#简介

<list> 组件是提供垂直列表功能的核心组件,拥有平滑的滚动和高效的内存管理,非常适合用于长列表的展示。最简单的使用方法是在 <list> 标签内使用一组由简单数组循环生成的 <cell> 标签填充。

<template>
  <list>
    <cell v-for="num in lists">
      <text>{{num}}</text>
    </cell>
  </list>
</template>

<script>
  export default {
    data () {
      return {
        lists: ['A', 'B', 'C', 'D', 'E']
      }
    }
  }
</script>

注意

  • 不允许相同方向的 <list> 或者 <scroller> 互相嵌套,换句话说就是嵌套的 <list> / <scroller> 必须是不同的方向。
  • <list> 需要显式的设置其宽高,可使用 position: absolute; 定位或 widthheight 设置其宽高值。

#子组件

<list> 的子组件只能包括以下四种组件或是 fix 定位的组件,其他形式的组件将不能被正确渲染。

  • <cell>
    用于定义列表中的子列表项,类似于 HTML 中的 ul 之于 li。Weex 会对 <cell> 进行高效的内存回收以达到更好的性能。
  • <header>
    <header> 到达屏幕顶部时,吸附在屏幕顶部。
  • <refresh>
    用于给列表添加下拉刷新的功能。
  • <loading>
    <loading> 用法与特性和 <refresh> 类似,用于给列表添加上拉加载更多的功能。

#属性

属性名 说明 类型 默认值
show-scrollbar 控制是否出现滚动条 boolean true
loadmoreoffset 触发 loadmore 事件所需要的垂直偏移距离(设备屏幕底部与 list 底部之间的距离),建议手动设置此值,设置大于0的值即可 number 0
offset-accuracy 控制 onscroll 事件触发的频率:表示两次onscroll事件之间列表至少滚动了10px。注意,将该值设置为较小的数值会提高滚动事件采样的精度,但同时也会降低页面的性能 number 10
pagingEnabled 是否按分页模式线上List,默认值falsev0.20+ boolean true/false
scrollable 是否运行List关系 boolean true/false

loadmoreoffset 示意图:

img

#事件

  • loadmore 事件
    如果列表滚动到底部将会立即触发这个事件,你可以在这个事件的处理函数中加载下一页的列表项。 如果未触发,请检查是否设置了loadmoreoffset的值,建议此值设置大于0 ,并且可以通过重置loadmore方式达到目的
如何重置
<template>
  <list ref="list">
    <cell v-for="num in lists">
      <text>{{num}}</text>
    </cell>
  </list>
</template>

<script>
  export default {
    data () {
      return {
        lists: ['A', 'B', 'C', 'D', 'E']
      }
    },
    methods: {
        // 重置 loadmore
        resetLoadMore() {
            this.$refs["list"].resetLoadmore();
        }
    }
  }
</script>
  • scroll 事件
    列表发生滚动时将会触发该事件,事件的默认抽样率为 10px,即列表每滚动 10px 触发一次,可通过属性 offset-accuracy 设置抽样率。

    事件中的 event 对象属性:

    • contentSize {Object}
      

      :列表的内容尺寸

      • width {number}:列表内容宽度
      • height {number}:列表内容高度
    • contentOffset {Object}
      

      :列表的偏移尺寸

      • x {number}:x轴上的偏移量
      • y {number}:y轴上的偏移量
    • isDragging {boolean}: 用户是否正在拖动列表

#扩展

#scrollToElement(node, options)

滚动到列表某个指定项是常见需求,<list> 拓展了该功能,可通过 dom.scrollToElement() 滚动到指定 <cell>。更多信息可参考 dom module
相应的 demo 可参考 示例中的实现。

#Vue 示例

简单示例
滑动加载
头部示例
cell appear事件

#Rax 示例

rax-recyclerview<list> 组件的上层封装,抹平了 Web 和 Weex 的展现

import { createElement, Component, render } from 'rax';
import View from 'rax-view';
import Text from 'rax-text';
import Driver from "driver-universal"
import RecyclerView from 'rax-recyclerview';

function Thumb() {
  return (
    <RecyclerView.Cell>
      <View style={styles.button}>
        <View style={styles.box} />
      </View>
    </RecyclerView.Cell>
  );
}
let THUMBS = [];
for (let i = 0; i < 20; i++) THUMBS.push(i);
let createThumbRow = (val, i) => <Thumb key={i} />;

function App() {
  return (
    <View style={styles.root}>
      <View style={styles.container}>
        <RecyclerView
          style={{
            height: 500
          }}>
          <RecyclerView.Header>
            <Text>Sticky view is not header</Text>
          </RecyclerView.Header>
          <RecyclerView.Header>
            <View style={styles.sticky}>
              <Text>Sticky view must in header root</Text>
            </View>
          </RecyclerView.Header>
          {THUMBS.map(createThumbRow)}
        </RecyclerView>
      </View>
    </View>
  );
}

let styles = {
  root: {
    width: '750rpx',
  },
  container: {
    padding: '20rpx',
    borderStyle: 'solid',
    borderColor: '#dddddd',
    borderWidth: '1rpx',
    marginLeft: '20rpx',
    height: '1000rpx',
    marginRight: '20rpx',
    marginBottom: '10rpx',
  },
  button: {
    margin: '7rpx',
    padding: '5rpx',
    alignItems: 'center',
    backgroundColor: '#eaeaea',
    borderRadius: '3rpx',
  },
  box: {
    width: '64rpx',
    height: '64rpx',
  }
};

render(<App />, document.body, { driver: Driver });

rax-recyclerview 文档

posted on   AtlasLapetos  阅读(5)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示