组件可见区域变化事件onVisibleAreaChange踩过的坑
组件可见区域变化事件onVisibleAreaChange踩过的坑
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS CAPI是否支持监听组件可见区域变化事件
368浏览 • 1回复 待解决
组件复用提升性能,不小心可能踩的坑,注意避让
687浏览 • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次
1961浏览 • 1回复 待解决
容器组件onVisibleAreaChange不生效
1759浏览 • 1回复 待解决
关于使用Video组件实现在列表List组件中滑动到可见区域自动播放视频的问题
293浏览 • 1回复 待解决
可否在应用启动时不触发onVisibleAreaChange的回调,仅在组件有变化时触发
2018浏览 • 1回复 待解决
如何屏蔽弹窗外的区域事件
2422浏览 • 1回复 待解决
Text组件布局过界问题
989浏览 • 1回复 待解决
自定义组件是否有生命周期可见不可见?
1937浏览 • 1回复 待解决
是否支持控制自定义组件的可见性,比如仅包内可见
1872浏览 • 1回复 待解决
HarmonyOS List中不可见组件的预加载问题
192浏览 • 1回复 待解决
HarmonyOS promptAction.openCustomDialog 无法监听点击遮罩区域的事件
347浏览 • 1回复 待解决
TextInput怎么动态改变密码输入的可见与不可见
3443浏览 • 1回复 待解决
HarmonyOS 父组件中的变量发现变化时,如何子组件的子组件联动变化?
200浏览 • 1回复 待解决
panel组件点击区域问题
4749浏览 • 1回复 待解决
HarmonyOS 如何扩大组件点击区域
342浏览 • 1回复 待解决
如何区分页面可见无焦点和页面可见有焦点
1836浏览 • 1回复 待解决
如何实现List()组件的代码设置显示区域?
233浏览 • 1回复 待解决
LazyForEach中滑出显示区域的子组件会被销毁
1823浏览 • 1回复 待解决
Navigation和Tabs组件如何获取内容区域的尺寸
2078浏览 • 1回复 待解决
Panel 组件的遮罩区域能否配置为不生效?
641浏览 • 1回复 待解决
UIAbility如何设置不可见
1970浏览 • 1回复 待解决
List组件的页面复写了onMeasure/onLayout生命周期,数据列表不可见
1799浏览 • 1回复 待解决
HarmonyOS 父组件如何响应子组件内的事件方法 ,子组件如何响应父组件内的事件方法?
230浏览 • 1回复 待解决
HarmonyOS 子组件响应父组件的事件方法
205浏览 • 1回复 待解决
应用市场详情页面,视频轮播图卡片,要求当视频滑动到屏幕可见区域之外时,要停止播放。实现这个功能,首先就想到了组件可见区域变化事件onVisibleAreaChange。但是在开发过程中,踩过如下的坑:当在video视频组件上挂载onVisibleAreaChange事件,当视频播放时,会无限高频触发onVisibleAreaChange事件(即使手指离开设备,不做任何操作)。
经过反复验证,发现当视频暂停播放时,视频组件可见区域变化事件onVisibleAreaChange监听正常,符合预期。只有当视频播放时,才会无限高频触发onVisibleAreaChange监听事件。猜想,通过对Text标签的内容动态定时器修改,并对Text标签挂载组件可见区域变化事件onVisibleAreaChange(如下代码),会有怎样的效果呢?结果发现同样也会触发高频触发onVisibleAreaChange事件。因此认为当Text标签内容变动/或者Video标签视频播放(即帧渲染时),都是会触发组件可见区域变化事件onVisibleAreaChange的。
经过确认,当存在页面重新构建刷新时,都会触发onVisibleAreaChange ,因为在代码逻辑中,video的点击事件中,有触发@State修饰的响应式数据变量存在修改,从而导致页面组件刷新,进而引起触发onVisibleAreaChange。
那么如何跳过这个坑呢?
既然组件可见区域变化事件onVisibleAreaChange,挂载在内容可变的Text/Video等标签上,会高频触发可能导致影响后续的处理逻辑,那么就把内容可变的Text/Video等标签包裹一层同等大小的容器(如Row,Column等),在把这个容器上挂载组件可见区域变化事件onVisibleAreaChange。
注意:即使在Video标签外包裹了一层同等大小的容器,并在这个容器上挂载组件可见区域变化事件onVisibleAreaChange,但当视频暂停/播放时,仍会各自触发一次挂载在容器组件的onVisibleAreaChange事件,触发@State修饰的响应式数据变量存在修改,从而导致页面组件刷新,进而引起触发onVisibleAreaChange。