HarmonyOS 有个复杂的交互效果怎么实现

现在App有很多个页面的交互效果是这样:

1,顶部导航初始的时候只有一个返回按钮,透明展示。

2,上划页面,导航栏颜色逐渐填充。

3,导航下面有部分信息展示,再下面是类似于tabs组件,是分类的列表展示。

4,分类滑动到导航下面的时候有吸顶效果。

HarmonyOS
21h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu
// xxx.ets
@Entry
@Component
struct ListExample {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  @State totalScrollOffset: number = 0;
  private tabArray: number[] = [0, 1, 2]
  @State focusIndex: number = 0;
  private controller: TabsController = new TabsController()
  @Builder
  myScroll() {
    Scroll() {
      Row() {
        ForEach(this.tabArray, (item: number, index: number) => {
          Row({ space: 20 }) {
            Text('页签' + item)
              .fontWeight(index === this.focusIndex ? FontWeight.Bold : FontWeight.Normal)
          }
          .padding({ left: '10fp', right: '10fp' })
          .onClick(() => {
            this.controller.changeIndex(index)
            this.focusIndex = index
          })
        })
      }
    }
    .align(Alignment.Start)
    .scrollable(ScrollDirection.Horizontal)
    .scrollBar(BarState.Off)
    .width('100%')
  }
  build() {
    Column() {
      List({ space: 20, initialIndex: 0 }) {
        // ForEach(this.arr, (item: number) => {
        ListItem() {
          Text('')
            .width('100%')
            .height(100)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .borderRadius(10)
            .backgroundColor(Color.Red)
        }
        ListItemGroup({ header: this.myScroll() }) {
          ListItem() {
            //tabs组件把tabbar隐藏
            Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
              ForEach(this.tabArray, (item: number, index: number) => {
                TabContent() {
                  List({ space: 20, initialIndex: 0 }) {
                    ForEach(this.arr, (item: number) => {
                      ListItem() {
                        Text('' + item)
                          .width('100%').height(100).fontSize(16)
                          .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
                      }
                    }, (item: string) => item)

                  }
                  .listDirection(Axis.Vertical) // 排列方向
                  .scrollBar(BarState.Off)
                  .friction(0.6)
                  .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
                  .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
                  .nestedScroll({//规避滚动冲突
                    scrollForward:NestedScrollMode.PARENT_FIRST,
                    scrollBackward:NestedScrollMode.SELF_FIRST
                  })
                }
              })
            }
            .barHeight(20)
          }
        }
      }
      .sticky(StickyStyle.Header)
      .listDirection(Axis.Vertical) // 排列方向
      .scrollBar(BarState.Off)
      .friction(0.6)
      .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      .edgeEffect(EdgeEffect.None)
      .width('90%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor(0xDCDCDC)
    .padding({ top: 5 })
  }
}

这边复杂具体的业务逻辑是没有具体实现的,只能提供以上简单的demo作为参考。

使用了List组件的sticky属性:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-list-V5#sticky9

分享
微博
QQ
微信
回复
18h前
相关问题
如何处理复杂 SVG 图形交互?
150浏览 • 0回复 待解决
HarmonyOS 怎么实现类似SnackBar效果
30浏览 • 1回复 待解决
HarmonyOS list中item交互效果处理
429浏览 • 1回复 待解决
HarmonyOS 是否.9图实现效果
34浏览 • 1回复 待解决
HarmonyOS 如何实现转圈效果
800浏览 • 2回复 待解决
应用怎么实现半模态效果
2288浏览 • 1回复 待解决
栅格布局怎么实现滚动效果
481浏览 • 0回复 待解决
Text实现scroll效果怎么弄?
5940浏览 • 1回复 待解决
鸿蒙中怎么实现动画翻转效果
10531浏览 • 2回复 待解决
HarmonyOS 如何实现交互实现-吸顶
485浏览 • 1回复 待解决