HarmonyOS鸿蒙Next中【快应用】监听页面触顶及数据刷新案例

HarmonyOS鸿蒙Next中【快应用】监听页面触顶及数据刷新案例 问题背景:

快应用页面滑动时,滑动到页面某个地方时,想回到页面的最顶端去刷新页面数据,我们该如何实现?

解决方法:

我们可以通过快应用提供的页面方法this.$page.scrollTo去滑动到指定位置,只要指定方法中的top参数为0即可回到最顶端,至于如何监听页面触顶,快应用中又提供了onReachTop生命周期,我们可以调用该接口来监听,并在里面实现数据的刷新。

示例代码:

<template>
  <div class="container" onclick="click">
    <block for="{{listData}}">
      <text class="txt">{{ $item }}--{{ $idx }}</text>
    </block>
  </div>
</template>

<style>
  .container {
    flex: 1;
    flex-direction: column;
    align-items: center;
  }
  .txt {
    height: 150px;
    width: 85%;
    align-items: flex-start;
    margin-bottom: 15px;
    border-color: #9400D3;
    border-width: 5px;
  }
</style>

<script>
  import prompt from '@system.prompt'
  import router from '@system.router';
  export default {
    data: {
      listAdd: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
      listData: [],
    },
    onInit: function () {
      this.listData = [].concat(this.listAdd)
    },
    onReachTop: function () {
      prompt.showToast({
        message: "到顶部了"
      })
      // update page content
      var that = this
      for (let i = 0; i < this.listAdd.length; i++) {
        this.listData[i] = this.listAdd[this.listAdd.length - i - 1]
      }
      var renderData = [].concat(that.listData, that.listAdd)
      setTimeout(function () {
        that.listData = renderData
      }, 500)
    },
    click() {
      this.$page.scrollTo({ top: 0, behavior: "smooth" });
    },
    newclick() {
      router.push({
        uri: '/New',
        params: { body: " test send message", test: 'hello', newtest: 'newtest' }
      })
    }
  }
</script>

Tips: 示例中是在触顶时触发onReachTop周期后对数组进行了首尾对调来实现数据的刷新的效果,实际开发中开发者可以在该生命周期里面做一些内容更新的操作的。


更多关于HarmonyOS鸿蒙Next中【快应用】监听页面触顶及数据刷新案例的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中【快应用】监听页面触顶及数据刷新案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,快应用可以通过pageScroll事件监听页面滚动,判断是否触顶。以下是一个简单的案例:

export default {
  data: {
    isTop: false
  },
  onInit() {
    this.$page('page1').on('pageScroll', (e) => {
      if (e.scrollTop <= 0) {
        this.isTop = true;
        this.refreshData(); // 触顶时刷新数据
      } else {
        this.isTop = false;
      }
    });
  },
  refreshData() {
    // 数据刷新逻辑
    console.log('数据刷新中...');
  }
}

通过监听pageScroll事件,当scrollTop为0时,表示页面触顶,触发数据刷新操作。

回到顶部