首页
学习
活动
专区
圈层
工具
发布

HarmonyOS 开发实践 —— 基于RN框架实现高性能瀑布流页面

它利用容器的布局规则,将元素项目从上到下排列,形成多列参差不齐、不断加载的效果,使内容像瀑布般倾泻而下。由于其特点,瀑布流常用于展示图片资讯、购物商品和直播视频等多种数据形式。...开发瀑布流页面时,通常会面临数据量不固定、页面卡片高度不一、页面操作阻塞UI绘制线程、卡片布局复杂冗余、状态管理不合理等问题。...数据量不固定的问题通常采用批量请求数据的方式从服务器中获取数据的方式来解决。...即便如此,经过适配后的 FlatList 在性能上依然可能无法达到最佳效果。要理解这一点,我们需要先了解 FlatList 的工作原理。...的值作为列表项的高,而瀑布流的列表项的高度是不固定的,当列表项越来越多的时候,就会出现列表项布局在同一列的情况,破坏了瀑布流的结果,详情请查看 issue 。

8.3K10

React Native列表之FlatList开发实用教程

接下来就让我从FlatList的由来说起: 在大家React Native开发环境过程中遇到无法解决的问题可以在课程问答区进行提问,课程老师会对你进行辅导和帮助; FlatList的由来?...如果你不需要渲染就知道内容的高度的话,可以通过getItemLayout 属性来改善用户体验,这使得通过例如滚动到具体Item更平滑。比如使用 scrollToIndex滚动到指定的Item。...: object) 滚动到底部。如果不设置getItemLayout属性的话,可能会比较卡。...scrollToIndex(params: object) 滚动到指定位置,如果不设置getItemLayout属性的话,可能会比较卡。...如果不设置getItemLayout属性的话只能滚动到当前渲染窗口的某个位置。 scrollToOffset(params: object) 滚动到列表中的特定内容像素偏移量。

9.6K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    仿腾讯课堂固定滚动列表ReactNative组件

    前言 由于业务需要做成类似腾讯课堂课程详情滚动的效果,考虑到后面有可能有新的呈现方式,RN提供的组件没有这种滚动控件,不如自己封装,其实去年已经写了一篇但是写的比较乱,周末花了点时间重写梳理下做的东西。...项目地址 在这里,如果有好的意见欢迎提 issue或pr。 开始 我们先来看下,腾讯课堂视频播放详情页面是怎么样的? ?...跑起来运行后发现的一个严重的问题是,如果Tab导航控件的内容区域存在ScrollView或者ListView时,无法滚动,只有最外层可以滚动,也就是手势滚动被拦截了?...回过头来讲外层滚动容器通知内层滚动,其实通知滚动相当于不拦截事件,那么就是重写 onInterceptTouchEvent方法并返回false。而这个方法会随着手势不断调用,这时候聪明的你想到了啥?...如何封装RN组件 参考 RN 0.51中文文档,我们需要做这些东西: 原生上要做的事 1.创建原生固定滚动控件 2.创建管理滚动控件ViewManager的子类 3.创建实现了ReactPackage

    6.6K70

    React Native 列表组件:FlashList、FlatList 及更多

    FlatList 的主要特性: 支持水平滚动 可添加列表头部和尾部 支持分隔符 下拉刷新 滚动加载 支持 scrollToIndex 方法 支持多列布局 示例如下: import { StyleSheet...SectionList 主要特性: 支持水平滚动 支持列表头部和尾部 支持分隔符 支持分类标题 下拉刷新 滚动加载 支持 scrollToIndex 方法 支持多列布局 示例如下: import { StyleSheet..., header: { padding: 10, fontSize: 20, backgroundColor: '#ddd' }, }); 在 iOS 端,SectionList 的分组标题默认会固定在顶部...FlashList 主要特性: 优化渲染,速度提升 10 倍 流畅滚动,内存占用更低 API 兼容 FlatList,迁移成本低 安装 FlashList: # 使用 yarn yarn add @shopify...虚拟化渲染 大型数据集 良好 SectionList 虚拟化渲染 分类数据集 良好 FlashList 高度优化 超大数据集 优异 总结 React Native 提供了丰富的列表组件,而 FlashList

    2.7K00

    webview 和 React Native 中吸顶效果实现

    在目标区域在屏幕中可见时,它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed,它会固定在目标位置。...占位元素的高度和 current2 高度相同。...RN 中有很多中实现吸顶的方式,ScrollView ,FlatList ,和 SectionList 都能实现吸顶效果, 3.1 ScrollView 和 FlatList ScrollView 和...ScrollView stickyHeaderIndices={[0]}//第一个子元素即头部组件,上滑时吸顶 /> stickyHeaderIndices: 一个子视图下标的数组,用于决定哪些成员会在滚动之后固定在屏幕顶端...举个例子,传递stickyHeaderIndices={[0]}会让第一个成员固定在滚动视图顶端。这个属性不能和horizontal={true}一起使用。

    5K10

    跨平台混编框架MUI仿豆瓣电影APP

    平台专属能力需桥接原生模块比如 iOS 的动态岛(Dynamic Island)适配、Android 的深色模式自动切换、通知权限弹窗时机等,都无法仅靠 JS 层实现。...关键在于不依赖固定像素,而是以比例、最小宽度断点和内容优先级驱动布局变化。同时,图片加载做了懒加载与占位图优化,避免滚动卡顿。...后续通过以下措施显著提升流畅度:使用 React.memo 和 useCallback 减少不必要的重渲染;对长列表采用虚拟滚动(FlatList / SectionList);图片资源按分辨率分发,并启用...iOS 和 Android 用户有不同的交互预期,强行抹平只会两头不讨好。未来,我会继续探索如何在保持代码共享率的同时,更优雅地注入平台专属体验。...如果你也在尝试类似项目,不妨记住一句话:“Write once, adapt everywhere.” —— 写一次,但为每个平台用心适配。

    49010

    史上最易懂——ReactNative分组列表SectionList使用详情及示例详解

    FlatList 用于替代ListView,支持下拉刷新和上拉加载。   SectionList 高性能的分组列表组件。...length: number, offset: number, index: number} getItemLayout是一个可选的优化,用于避免动态测量内容尺寸的开销,不过前提是你可以提前知道内容的高度...如果你的行高是固定的,getItemLayout用起来就既高效又简单,类似下面这样: getItemLayout={(data, index) => ( {length: 行高, offset: 行高 ...比如说,viewPosition 为0时将这个列表项滚动到可视区顶部 (可能会被顶部粘接的header覆盖), 为1时将它滚动到可视区底部, 为0.5时将它滚动到可视区中央。...viewOffset是一个以像素为单位,到最终位置偏移距离的固定值,比如为了弥补粘接的header所占据的空间 注意: 如果没有设置getItemLayout,就不能滚动到位于外部渲染区的位置。

    6.3K140

    React Native 性能优化指南

    考虑到上面的情况,我在项目中一般很少用 PureComponent。虽然很简单易用,但是面对复杂逻辑时,反而不如利用 shouldComponentUpdate 手动管理简单粗暴。...比如说下面的动图,在屏幕中上下滚动时,y 轴上的偏移可以通过 ScrollView#onScroll 属性开启 useNativeDrive: true 来优化滚动体验。...跟随手势的动画,是无法使用这个属性的,所以手势捕捉和动画,都是在 JS 侧动态计算的。 我们举一个简单的例子:小球跟随手势移动。...文档中说了好几点优化,其实在前文我都介绍过了,这里再简单提一下: 1.使用 getItemLayout 如果 FlatList(VirtualizedList)的 ListLtem 高度是固定的,那么使用...在这里我还想提一下几个注意点,希望大家使用 getItemLayout 要多注意一下: 如果 ListItem 高度不固定,使用 getItemLayout 返回固定高度时,因为最终渲染高度和预测高度不一致

    7.3K200

    防御式CSS是什么?这几点属性重点防御!

    我们可以应用一种方法,在CSS变量值因某种原因为空的情况下,以一种不破坏体验的方式使用它们。 通过 JS 输入CSS变量的值时特别有用。...7.使用固定宽度或高度 破坏布局的常见情况之一是对一个有不同长度内容的元素使用固定的宽度或高度。 固定高度 我经常看到主内容部分有固定的高度,而内容却大于这个高度,这就导致了布局的破坏。...这是由于使用了固定宽度。 .button { width: 100px; } 如果按钮的标签大于100px,它将靠近边缘。如果它太长,文本会泄露出来。这是不好的!...图片上的文字 当在图片上放置文本时,必须考虑到图像无法加载的情况。文本会是什么样子。下面是一个例子: 文本看起来是可读的,但当图像加载失败时,它的可读性变得很差。...这些滚动条通常是不透明的,并从相邻的内容中占用一些空间。 请看下图: 请注意,由于显示了滚动条,当内容变长时,它是如何移位的。我们可以通过使用scrollbar-gutter属性来避免这种行为。

    6.7K30

    JDReact小程序双向转换工具介绍

    我们不希望转化之后的程序在这种情况下报错,我们对这种表达式进行了容错,react-native(预计0.56版本)支持optional-chaining之后,我们也会跟进用optional-chaining...但是转化引擎应用于实际项目还有一段距离,因为不管是小程序项目还是JDReact项目都不可能只有View, Text组件, 即使我们把users && FlatList/> 转化为小程序 FlatList...要想让小程序认识FlatList,我们需要在小程序端实现一个小程序版的FlatList,好在发展到今天,小程序的自定义组件已经很完善。...border-width,而适配到RN中,则需要转化为borderWidth,不仅如此,对于一些简写的属性,例如小程序CSS中的 div {margin 10px 0;} 有着明确的语意,然而在RN中,无法解析这样的语法...在RN端,小程序的scroll-view是可以上下左右滚动的,而RN的只可以一个方向, 事件处理的差异等等。 对于所有的这些限制和约束,我们后续会给出一份完整的清单,同时也会给出相应的替换方案。

    3.3K20

    🤯 没 2 年 React Native 开发经验,你都遇不到这些坑

    第一个是吸顶功能,涉及到 StickyHeaderComponent 和 stickyHeaderIndices 这两个 API,可以实现滚动吸顶的效果,非常的好用。...7.FlatList FlatList 主要是注意 3 个点: FlatList 提供自定义的头部/底部/空白/分割线组件,比一般的 Web 组件封装更彻底一些 React 渲染列表的时候会要求加 key...以提高 diff 性能,但是 FlatList 封装的比较多,需要用 `keyExtractor`[6] 这个 API 来指定列表 Cell 的 key FlatList 性能优化的内容官网写的不是很好...由于第三方库太多了,所以我这里就不一一列举了。 四、特效篇 React Native 的 style 样式属性只提供了基础的布局属性,例如 flexbox layout、fontSize 等等。...但它目前其实还是一个实验性项目,上生产环境风险还是太大了。不过就我个人经验来说,很多绘制功能都能基于 SVG 实现,必须用 canvas 的情况应该并不多见。

    6.3K20

    浅议内滚动布局 - 腾讯ISUX

    新版企业账户中心全站,顶部以及左侧固定,不跟随滚动,右侧主体内滚动,如何实现呢? 由于企业产品不用管0.4%的IE6用户,因此,事件就变得简单地多了。...但是,你如果直接放在中,由于只能是一个,不动产,此时想要做整体迁移,难度就较大,同时项目几乎成型,全局修改成本高高风险大。...,一般是absolute绝对定位,高度由JS计算赋予;如果不需要管IE6, 则可以使用fixed固定定位。...100%尺寸的position:absolute/fixed的覆盖层,会覆盖任何非元素(包括)(包括这些元素的滚动条),因此,只要覆盖+滚动容器改变,页面就无法滚动。...但是,麻烦的事情是,如果弹框自身高度很高,却又没法滚动呢(浏览器可用高度700像素,弹框有900像素高)?

    2K30

    WebBuilder Component 组件 autoScroll 属性完整使用方法

    生效前提:组件必须配置固定 height(高度);未设置高度时组件自适应内容大小,autoScroll 将失效。...1:可视化拖拽配置(实施人员推荐)在页面 viewport 容器内,拖拽添加【Component 自定义组件】选中组件,在右侧属性面板完成基础配置: 设置 height 固定高度(例如 6em、200px...三、各参数使用场景与效果说明不填写 autoScroll(默认) 容器设置高度,超出内容直接向外溢出,会挤压周边组件。 使用限制:仅用于测试 Demo,正式业务系统禁止使用。...✅ 检查:是否设置固定height;没有高度,滚动逻辑不会触发。...移动端无法滑动 ✅ 完成 PC 端调试后,务必真机测试移动端;部分移动端浏览器对隐藏滚动条模式存在兼容性差异。

    13500

    浅议内滚动布局

    新版企业账户中心全站,顶部以及左侧固定,不跟随滚动,右侧主体内滚动,如何实现呢? 由于企业产品不用管0.4%的IE6用户,因此,事件就变得简单地多了。...但是,你如果直接放在中,由于只能是一个,不动产,此时想要做整体迁移,难度就较大,同时项目几乎成型,全局修改成本高高风险大。...无法滚动的弹出层 基本上,是个像样的web2.0网站都会有弹框web组件,一个黑色半透明的overlay层,上面摇曳着弹框面板,例如这样的: ?...对于黑色半透明覆盖层,传统实现是这样的:如果要兼容IE6浏览器,一般是absolute绝对定位,高度由JS计算赋予;如果不需要管IE6, 则可以使用fixed固定定位。...但是,麻烦的事情是,如果弹框自身高度很高,却又没法滚动呢(浏览器可用高度700像素,弹框有900像素高)?

    3.1K50

    「前端进阶」高性能渲染十万条数据(虚拟列表)

    ,用于形成滚动条 infinite-list 为列表项的 渲染区域 接着,监听 infinite-list-container的 scroll事件,获取滚动位置 scrollTop 假定 可视区域高度固定...,称之为 screenHeight 假定 列表每项高度固定,称之为 itemSize 假定 列表数据称之为 listData 假定 当前滚动位置称之为 scrollTop 则可推算出: 列表总高度 listHeight...列表项动态高度 在之前的实现中,列表项的高度是固定的,因为高度固定,所以可以很轻易的获取列表项的整体高度以及滚动时的显示数据与对应的偏移量。...为了使页面平滑滚动,我们还需要在 可见区域的上方和下方渲染额外的项目,在滚动时给予一些 缓冲,所以将屏幕分为三个区域: 可视区域上方: above 可视区域: screen 可视区域下方: below...遗留问题 我们虽然实现了根据列表项动态高度下的虚拟列表,但如果列表项中包含图片,并且列表高度由图片撑开,由于图片会发送网络请求,此时无法保证我们在获取列表项真实高度时图片是否已经加载完成,从而造成计算不准确的情况

    12.3K74

    小智在这3年开发中遇到的 CSS 问题及解决方案,有大佬帮他总结好了 !

    如果,由于某种原因,项目的数量是7呢?第二行元素看起来与第一行不同。 ? ? 在这种情况下,使用CSS网格会更合适。 事例源码:https://codepen.io/shadeed/pe... 5....简而言之,auto-fill将在不扩展列宽的情况下对列进行排列,而auto-fit只会在列为空的情况下将列折叠到零宽度。 8....解决方法不是当用户往下划动的时候,固定头部需要回到文档中跟随屏幕滚动,可以使用position: sticky来快速达到该效果。...在下面的示例中,每个项目的右侧都有8px的空间,但是由于使用display:inline-block导致增加了一个空格,最后结果是12px,这不是期望的结果。 ?...水平滚动条 由于元素的宽度,有些元素会导致出现水平滚动条。 找到这个问题的原因最简单的方法就是使用 CSS outline。

    6.1K10

    页面中元素的吸顶

    这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情 >> [前言] 现在由于医嘱开立界面需要对新开的输入框进行首行或者尾行的行固定效果,使用的实现方案只能在谷歌浏览器90.0...[需求] 滚动页面到顶部,实现某元素固定到顶部效果 点击某个按钮,页面滚动到相应的位置 滚动页面,当到达某个位置时,高亮对应的相关按钮 [元素吸顶实现方式] 关于元素吸顶效果,通过查阅相关资料和相关测试...sticky元素效果完全受限于父级元素,使用条件: sticky元素的父元素的overflow只能设置为visible,否则会导致没有粘滞效果 sticky元素的父元素不能设置固定的高度,否则会导致没有粘滞效果...: mounted() { /**通过给变成固定定位的元素添加一个同等高度的父元素,防止该元素变成固定定位时,脱离文档流导致的页面抖动 */ this.tabsHeight = this...获取某元素距离浏览器顶部的高度,不包含滚动的距离 this.offsetTop 表示的是吸顶元素距离顶部的条件值(一般项目需求是0) */ let tabOffsetTop

    2K30

    浅议内滚动布局

    新版企业账户中心全站,顶部以及左侧固定,不跟随滚动,右侧主体内滚动,如何实现呢? 由于企业产品不用管0.4%的IE6用户,因此,事件就变得简单地多了。...但是,你如果直接放在中,由于只能是一个,不动产,此时想要做整体迁移,难度就较大,同时项目几乎成型,全局修改成本高高风险大。...对于黑色半透明覆盖层,传统实现是这样的:如果要兼容IE6浏览器,一般是absolute绝对定位,高度由JS计算赋予;如果不需要管IE6, 则可以使用fixed固定定位。...但是,麻烦的事情是,如果弹框自身高度很高,却又没法滚动呢(浏览器可用高度700像素,弹框有900像素高)?...内滚动布局,更现代,更移动,如果您的项目合适,不妨也试试这种看似新颖的布局方式。

    1.6K20
    领券