harmonyos-next中Swiper如何实现滑动进度监听?
使用swiper想监听滑动进度,然后根据进度实现swiper组件高度的变化。也就是第一页和第二页的高度是不一致的,在滑动中增加高度。监听onGestureSwipe中的extraInfo.currentOffset又获取不到准确的进度
本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
harmonyos-next中Swiper如何实现滑动进度监听?
使用swiper想监听滑动进度,然后根据进度实现swiper组件高度的变化。也就是第一页和第二页的高度是不一致的,在滑动中增加高度。监听onGestureSwipe中的extraInfo.currentOffset又获取不到准确的进度
本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
在HarmonyOS的harmonyos-next
中,Swiper
组件并没有直接提供滑动进度的监听事件。不过,你可以通过一些技巧来实现这个功能。
首先,onGestureSwipe
事件中的extraInfo.currentOffset
确实不是用于获取滑动进度的标准方法。这个属性更可能是用来获取当前滑动的偏移量。
要监听滑动进度,你可以考虑以下步骤:
onPageScrollStateChanged
事件:这个事件会在每一页的滑动状态改变时触发,你可以通过它来获取当前显示的页面索引。Swiper
的currentPage
属性:currentPage
属性表示当前显示的页面索引。你可以监听这个属性的变化,然后根据不同的页面来设置Swiper
的高度。currentPage
的值,并根据这个值来改变Swiper
的高度。以下是一个简单的示例代码:
// 在你的组件中
data: {
swiperHeight: 200, // 初始高度
timer: null, // 用于存储定时器的变量
},
onReady() {
this.timer = setInterval(() => {
const currentPage = this.$refs.swiper.currentPage;
// 根据currentPage的值来设置swiperHeight
if (currentPage === 0) {
this.swiperHeight = 200;
} else if (currentPage === 1) {
this.swiperHeight = 300;
}
// ... 其他页面的高度设置
}, 100); // 每100ms检查一次
},
onDestroy() {
clearInterval(this.timer); // 销毁组件时清除定时器
},
// 在你的模板中
<swiper ref="swiper" on-page-scroll-state-changed="onPageScrollStateChanged">
<!-- swiper的items -->
</swiper>
<style scoped>
swiper {
height: {{ swiperHeight }}px;
}
</style>
这个示例中,我们在onReady
生命周期中设置了一个定时器,定期检查Swiper
的currentPage
属性,并根据这个属性来动态设置Swiper
的高度。当组件销毁时,我们清除这个定时器。
请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行调整。例如,你可能需要考虑滑动速度、滑动方向等因素,以确保滑动过程中的高度变化更加平滑和自然。
1 回答460 阅读✓ 已解决
1 回答488 阅读
1 回答382 阅读
391 阅读
324 阅读
1 回答154 阅读
组件开始滑动会触发onAnimationStart回调,结束滑动会触发onAnimationEnd回调,两个回调的时间间隔是固定的,也就是.duration设置的时间,可以通过时间知道滑动进度,比如.duration设置2秒,onAnimationStart触发后过了1秒,表明组件滑动了50%
以上方法只能获取粗略的滑动进度,如果想获取很精确的进度数值可以使用其他方式,比如使用Scroll包裹flex方式。