嵌套滚动回滑,在一些常见的商品预览页,会出现嵌套滚动的场景

在一些常见的商品预览页,会出现嵌套滚动的场景,比如Scroll组件嵌套WaterFlow瀑布流布局展示商品,屏幕往上滑动几屏的数据后,回滑有筛选项随WaterFlow顶部滑出。


HarmonyOS
2024-05-26 11:03:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
NGKSWCIDT

使用的核心API

  •  List
  •  WaterFlow

核心代码解释

@Entry 
@Component 
struct StickyNestedScroll { 
  @State arr: number[] = [] 
  
  @Styles 
  listCard() { 
    .backgroundColor(Color.White) 
    .height(72) 
    .width("100%") 
    .borderRadius(12) 
  } 
  
  @State 
  textOffset: number = 0 
  scroller: Scroller = new Scroller() 
  @State 
  top: number = 200 
  
  build() { 
    Stack({ alignContent: Alignment.TopStart }) { 
      List({ scroller: this.scroller, space: 10 }) { 
        ForEach(this.arr, (item: number) => { 
          ListItem() { 
            Text("item" + item) 
              .fontSize(16) 
          }.listCard() 
        }, (item: string) => item) 
      }.width("100%") 
      .edgeEffect(EdgeEffect.Spring) 
      .margin({ 
        top: this.top 
      }).onScrollFrameBegin((offset: number, state: ScrollState) => { 
  
        if (this.textOffset - offset >= 0) { 
          this.textOffset = 0 
        } else { 
          this.textOffset = this.textOffset - offset 
        } 
        if ( this.textOffset < -200) { 
          this.textOffset = -200 
        } 
        if (this.top - offset >= 200) { 
          this.top = 200 
        } else { 
          if (this.top - offset <0) { 
            this.top = 0 
          } else { 
            this.top = this.top - offset 
          } 
        } 
        if (this.textOffset != -200 && this.textOffset != 0) { 
          return { 
            offsetRemain: 0 
          } 
        } 
        console.log("lizhouze", this.top) 
        return { 
          offsetRemain: offset 
        } 
      }) 
  
      Text("Scroll Area") 
        .width("100%") 
        .height(200) 
        .backgroundColor('#0080DC') 
        .offset({ 
          y: this.textOffset 
        }) 
  
    }.width("100%") 
  
  } 
  
  aboutToAppear() { 
    for (let i = 0; i < 30; i++) { 
      this.arr.push(i) 
    } 
  } 
}

实现效果

适配版本信息

SDK:4.1.5.6

IDE:DevEco Studio 4.1.1.500

分享
微博
QQ
微信
回复
2024-05-27 10:46:42
相关问题
基于webView嵌套滚动
520浏览 • 1回复 待解决
如何实现嵌套滚动技术
1074浏览 • 1回复 待解决
HarmonyOS Web嵌套滚动体验差
30浏览 • 1回复 待解决
Grid嵌套滚动问题有知道吗?
2641浏览 • 1回复 待解决
页面和列表嵌套滚动,实现列表吸顶
1263浏览 • 1回复 待解决
数组嵌套数组场景懒加载实现
629浏览 • 1回复 待解决