HarmonyOS 鸿蒙Next 吸顶效果实现

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 吸顶效果实现 使用Scroll组件,某个元素无法在滑动时固定在首位,即如何实现吸顶效果

3 回复

参考demo:

@Entry
@Component
struct ScrollCeiling1 {
  scroller: Scroller = new Scroller()
  itemData: Array<number> = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  tabTitles: Array<string> = ['Tab1', 'Tab2', 'Tab3']

  // 创建Tabs组件单个tab下的内容组件,并设置TabContent组件内的List组件的nestedScroll属性,List组件的父组件为TabContent组件
  @Builder
  tabContentData(tabTitle: string) {
    TabContent() {
      List() {
        ForEach(this.itemData, (item: number) => {
          ListItem() {
            Text(`${ item }`).height(80).width('100%').textAlign(TextAlign.Center).backgroundColor(0xDDDDDD).margin({bottom: 5})
          }
        })
      }
      .nestedScroll({
        scrollForward: NestedScrollMode.PARENT_FIRST,
        scrollBackward: NestedScrollMode.SELF_FIRST
      })
    }.tabBar(tabTitle)
    .padding({top:5, bottom:5})
    .borderWidth(1)
    .borderColor(Color.Red)
  }

  /*
  设置scrollForward的滚动模式为NestedScrollMode.PARENT_FIRST:
  当控制List内元素向前滚动时,其父组件TabContent先滚动,覆盖Scroll组件嵌套的Column组件内的Image组件,随后Tabs组件触碰顶部边缘,触发边缘效果,从而固定在顶部
  设置scrollBackward的滚动模式为NestedScrollMode.SELF_FIRST:
  当控制List内元素向后滚动时,List的内容先滚动,直至滚动到List最顶部后,父组件TabContent开始滚动
  */

  build() {
    Scroll(this.scroller){
      Column() {
        Image($r('app.media.app_icon')).height(70)

        Tabs() {
          ForEach(this.tabTitles, (title: string) => {
            this.tabContentData(title)
          })
        }
        .borderWidth(2)
      }
      .width('90%')
      .alignItems(HorizontalAlign.Center)
    }
    .width('100%')
    .align(Alignment.Center)
    .scrollBar(BarState.Off)
  }
}

更多关于HarmonyOS 鸿蒙Next 吸顶效果实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


参考demo:

@Entry
@Component
struct ScrollCeiling1 {
  scroller: Scroller = new Scroller()
  itemData: Array<number> = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  tabTitles: Array<string> = ['Tab1', 'Tab2', 'Tab3']

  // 创建Tabs组件单个tab下的内容组件,并设置TabContent组件内的List组件的nestedScroll属性,List组件的父组件为TabContent组件
  @Builder
  tabContentData(tabTitle: string) {
    TabContent() {
      List() {
        ForEach(this.itemData, (item: number) => {
          ListItem() {
            Text(`${ item }`).height(80).width('100%').textAlign(TextAlign.Center).backgroundColor(0xDDDDDD).margin({bottom: 5})
          }
        })
      }
      .nestedScroll({
        scrollForward: NestedScrollMode.PARENT_FIRST,
        scrollBackward: NestedScrollMode.SELF_FIRST
      })
    }.tabBar(tabTitle)
    .padding({top:5, bottom:5})
    .borderWidth(1)
    .borderColor(Color.Red)
  }

  /*
  设置scrollForward的滚动模式为NestedScrollMode.PARENT_FIRST:
  当控制List内元素向前滚动时,其父组件TabContent先滚动,覆盖Scroll组件嵌套的Column组件内的Image组件,随后Tabs组件触碰顶部边缘,触发边缘效果,从而固定在顶部
  设置scrollBackward的滚动模式为NestedScrollMode.SELF_FIRST:
  当控制List内元素向后滚动时,List的内容先滚动,直至滚动到List最顶部后,父组件TabContent开始滚动
  */

  build() {
    Scroll(this.scroller){
      Column() {
        Image($r('app.media.app_icon')).height(70)

        Tabs() {
          ForEach(this.tabTitles, (title: string) => {
            this.tabContentData(title)
          })
        }
        .borderWidth(2)
      }.width('90%')
      .alignItems(HorizontalAlign.Center)
    }.width('100%')
    .align(Alignment.Center)
    .scrollBar(BarState.Off)
  }

在HarmonyOS(鸿蒙)系统中实现吸顶效果(Sticky Header),通常涉及到布局管理和滚动事件监听。以下是一个简要的实现思路,不涉及Java或C语言代码。

吸顶效果的核心在于监听列表或滚动视图的滚动事件,当滚动到一定位置时,将某个视图(通常是表头)固定在屏幕顶部。在HarmonyOS中,你可以使用ArkUI(声明式UI框架)来实现这一效果。

  1. 布局设计:首先,设计你的页面布局,确保表头和其他内容可以分开管理。

  2. 滚动视图:使用Scroll组件来包裹你的内容列表,这样可以监听滚动事件。

  3. 条件渲染:根据滚动位置,动态调整表头的显示状态。如果滚动到了表头应该吸顶的位置,就将表头固定显示;否则,按照正常布局显示。

  4. 事件监听:通过监听Scroll组件的滚动事件,获取当前的滚动位置,并据此更新表头的显示状态。

  5. 样式调整:确保吸顶表头的样式与页面其他部分协调一致,可能需要进行一些样式调整,如背景色、边框等。

以上步骤提供了一个基本的实现框架。具体实现时,你可能需要根据自己的页面布局和需求进行适当调整。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部