组件可见区域变化事件onVisibleAreaChange踩过的坑
组件可见区域变化事件onVisibleAreaChange踩过的坑
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
组件复用提升性能,不小心可能踩的坑,注意避让
194浏览 • 1回复 待解决
容器组件onVisibleAreaChange不生效
467浏览 • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次
614浏览 • 1回复 待解决
如何屏蔽弹窗外的区域事件
798浏览 • 1回复 待解决
可否在应用启动时不触发onVisibleAreaChange的回调,仅在组件有变化时触发
727浏览 • 1回复 待解决
自定义组件是否有生命周期可见不可见?
525浏览 • 1回复 待解决
是否支持控制自定义组件的可见性,比如仅包内可见
679浏览 • 1回复 待解决
panel组件点击区域问题
3201浏览 • 1回复 待解决
Text组件布局过界问题
344浏览 • 1回复 待解决
TextInput怎么动态改变密码输入的可见与不可见
1992浏览 • 1回复 待解决
Panel 组件的遮罩区域能否配置为不生效?
325浏览 • 1回复 待解决
Navigation和Tabs组件如何获取内容区域的尺寸
628浏览 • 1回复 待解决
如何设置父组件随子组件宽度变化
547浏览 • 1回复 待解决
LazyForEach中滑出显示区域的子组件会被销毁
575浏览 • 1回复 待解决
如何区分页面可见无焦点和页面可见有焦点
719浏览 • 1回复 待解决
datagridview内的单元格数据变化,可自动触发事件,但报错的原因
887浏览 • 0回复 待解决
List组件的页面复写了onMeasure/onLayout生命周期,数据列表不可见
545浏览 • 1回复 待解决
图片作为文本的背景图,会随着文本的长度变化自动拉伸,可以设置横竖向拉伸的区域
332浏览 • 1回复 待解决
如何阻止组件的鼠标事件冒泡到父组件
627浏览 • 1回复 待解决
UIAbility如何设置不可见
693浏览 • 1回复 待解决
组件有没有支持事件穿透的属性
482浏览 • 1回复 待解决
父子组件间点击事件,有没有方法能够控制点击事件在不同的情况触发父/子组件的点击事件
342浏览 • 1回复 待解决
设置安全区域后,两个子组件之间存在大概顶部安全区域大小的间隙,无法铺满
482浏览 • 1回复 待解决
Web组件的onKeyEvent键盘事件不生效
608浏览 • 1回复 待解决
网络变化事件回调进了之后,马上去获取网络状态拿到的是之前的状态?
230浏览 • 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。