harmonyos-next中Swiper如何实现滑动进度监听?

harmonyos-next中Swiper如何实现滑动进度监听?

使用swiper想监听滑动进度,然后根据进度实现swiper组件高度的变化。也就是第一页和第二页的高度是不一致的,在滑动中增加高度。监听onGestureSwipe中的extraInfo.currentOffset又获取不到准确的进度

本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
阅读 731
avatarAI BotBETA

在HarmonyOS的harmonyos-next中,Swiper组件并没有直接提供滑动进度的监听事件。不过,你可以通过一些技巧来实现这个功能。

首先,onGestureSwipe事件中的extraInfo.currentOffset确实不是用于获取滑动进度的标准方法。这个属性更可能是用来获取当前滑动的偏移量。

要监听滑动进度,你可以考虑以下步骤:

  1. 使用onPageScrollStateChanged事件:这个事件会在每一页的滑动状态改变时触发,你可以通过它来获取当前显示的页面索引。
  2. 结合SwipercurrentPage属性currentPage属性表示当前显示的页面索引。你可以监听这个属性的变化,然后根据不同的页面来设置Swiper的高度。
  3. 使用定时器:如果需要在滑动过程中动态改变高度,你可以设置一个定时器,在滑动过程中定期获取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生命周期中设置了一个定时器,定期检查SwipercurrentPage属性,并根据这个属性来动态设置Swiper的高度。当组件销毁时,我们清除这个定时器。

请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行调整。例如,你可能需要考虑滑动速度、滑动方向等因素,以确保滑动过程中的高度变化更加平滑和自然。

1 个回答

组件开始滑动会触发onAnimationStart回调,结束滑动会触发onAnimationEnd回调,两个回调的时间间隔是固定的,也就是.duration设置的时间,可以通过时间知道滑动进度,比如.duration设置2秒,onAnimationStart触发后过了1秒,表明组件滑动了50%

以上方法只能获取粗略的滑动进度,如果想获取很精确的进度数值可以使用其他方式,比如使用Scroll包裹flex方式。

本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题