组件可见区域变化事件onVisibleAreaChange踩过的坑
组件可见区域变化事件onVisibleAreaChange踩过的坑
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS CAPI是否支持监听组件可见区域变化事件 
1588浏览  • 1回复 待解决
组件复用提升性能,不小心可能踩的坑,注意避让 
2325浏览  • 1回复 待解决
容器组件onVisibleAreaChange不生效 
3149浏览  • 1回复 待解决
HarmonyOS onVisibleAreaChange事件没有触发 
1144浏览  • 1回复 待解决
HarmonyOS NavDestination外层加了Column组件并给组件绑定事件onVisibleAreaChange没有回调 
1063浏览  • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次 
3168浏览  • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkWeb组件中检测页面可见性变化? 
883浏览  • 1回复 待解决
关于使用Video组件实现在列表List组件中滑动到可见区域自动播放视频的问题 
1300浏览  • 1回复 待解决
如何屏蔽弹窗外的区域事件 
3596浏览  • 1回复 待解决
可否在应用启动时不触发onVisibleAreaChange的回调,仅在组件有变化时触发 
2997浏览  • 1回复 待解决
HarmonyOS Navigation组件的Content内容无法监听可见和不可见状态 
907浏览  • 1回复 待解决
自定义组件是否有生命周期可见不可见? 
3237浏览  • 1回复 待解决
HarmonyOS List每次更新会把缓存的节点全部更新(包括屏幕不可见区域) 
827浏览  • 1回复 待解决
#鸿蒙通关秘籍#怎样处理鸿蒙应用可视区域变化对组件绑定的影响? 
1052浏览  • 1回复 待解决
HarmonyOS 组件设置onClick事件,如何实现点击组件过程中,组件背景的变化效果 
1462浏览  • 1回复 待解决
Text组件布局过界问题 
2570浏览  • 1回复 待解决
是否支持控制自定义组件的可见性,比如仅包内可见 
3451浏览  • 1回复 待解决
HarmonyOS  List中不可见组件的预加载问题 
1513浏览  • 1回复 待解决
HarmonyOS Swiper组件onVisibleAreaChange方法执行异常 
900浏览  • 1回复 待解决
#鸿蒙通关秘籍#如何在Toggle组件上绑定状态变化事件? 
1060浏览  • 1回复 待解决
HarmonyOS 如何捕捉自定义组件重新可见的时机 
1044浏览  • 1回复 待解决
HarmonyOS 下拉状态栏和收起状态栏不会触发可见性变化(onPageShow) 
1042浏览  • 1回复 待解决
HarmonyOS promptAction.openCustomDialog 无法监听点击遮罩区域的事件 
1557浏览  • 1回复 待解决
panel组件点击区域问题 
5899浏览  • 1回复 待解决
HarmonyOS 实况窗辅助区域按钮点击事件响应 
995浏览  • 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。