组件可见区域变化事件onVisibleAreaChange踩过的坑
组件可见区域变化事件onVisibleAreaChange踩过的坑
HarmonyOS
赞
收藏 0
回答 1
相关问题
HarmonyOS CAPI是否支持监听组件可见区域变化事件
1243浏览 • 1回复 待解决
组件复用提升性能,不小心可能踩的坑,注意避让
1802浏览 • 1回复 待解决
HarmonyOS onVisibleAreaChange事件没有触发
832浏览 • 1回复 待解决
容器组件onVisibleAreaChange不生效
2786浏览 • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次
2796浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkWeb组件中检测页面可见性变化?
636浏览 • 1回复 待解决
可否在应用启动时不触发onVisibleAreaChange的回调,仅在组件有变化时触发
2674浏览 • 1回复 待解决
关于使用Video组件实现在列表List组件中滑动到可见区域自动播放视频的问题
1018浏览 • 1回复 待解决
如何屏蔽弹窗外的区域事件
3269浏览 • 1回复 待解决
HarmonyOS Navigation组件的Content内容无法监听可见和不可见状态
641浏览 • 1回复 待解决
HarmonyOS List每次更新会把缓存的节点全部更新(包括屏幕不可见区域)
606浏览 • 1回复 待解决
是否支持控制自定义组件的可见性,比如仅包内可见
2757浏览 • 1回复 待解决
Text组件布局过界问题
2085浏览 • 1回复 待解决
#鸿蒙通关秘籍#怎样处理鸿蒙应用可视区域变化对组件绑定的影响?
727浏览 • 1回复 待解决
自定义组件是否有生命周期可见不可见?
2835浏览 • 1回复 待解决
HarmonyOS Swiper组件onVisibleAreaChange方法执行异常
580浏览 • 1回复 待解决
HarmonyOS 组件设置onClick事件,如何实现点击组件过程中,组件背景的变化效果
946浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Toggle组件上绑定状态变化事件?
757浏览 • 1回复 待解决
HarmonyOS List中不可见组件的预加载问题
1253浏览 • 1回复 待解决
TextInput怎么动态改变密码输入的可见与不可见
4593浏览 • 1回复 待解决
HarmonyOS promptAction.openCustomDialog 无法监听点击遮罩区域的事件
1296浏览 • 1回复 待解决
HarmonyOS 实况窗辅助区域按钮点击事件响应
729浏览 • 1回复 待解决
HarmonyOS 如何捕捉自定义组件重新可见的时机
768浏览 • 1回复 待解决
panel组件点击区域问题
5578浏览 • 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。