如何实现scroll、list单边回弹效果

如何实现scroll、list单边回弹效果

HarmonyOS
2024-07-23 11:11:36
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
江湖骗子嗷

​在onDidScroll里获取currentOffset().yOffset来控制单边回弹效果,在list组件还可以通过onScrollIndex实现单边回弹效果。

参考代码:

scroll组件

@Entry 
@Component 
struct Index { 
  @State yOffset: number = 0 
  scroller: Scroller = new Scroller() 
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
 
  build() { 
    Stack({ alignContent: Alignment.TopStart }) { 
      Scroll(this.scroller) { 
        Column() { 
          ForEach(this.arr, (item: number) => { 
            Text(item.toString()) 
              .width('90%') 
              .height(150) 
              .backgroundColor(0xFFFFFF) 
              .borderRadius(15) 
              .fontSize(16) 
              .textAlign(TextAlign.Center) 
              .margin({ top: 10 }) 
          }, (item: string) => item) 
        }.width('100%') 
      } 
      .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 
      .scrollBar(BarState.On) // 滚动条常驻显示 
      .scrollBarColor(Color.Gray) // 滚动条颜色 
      .scrollBarWidth(10) // 滚动条宽度 
      .friction(0.6) 
      .edgeEffect(this.yOffset <= 0 ? EdgeEffect.Spring : EdgeEffect.None) // 滚动到边沿后回弹 
      .onDidScroll(() => { 
        this.yOffset = this.scroller.currentOffset().yOffset; 
      }) 
    }.width('100%').height('100%').backgroundColor(0xDCDCDC) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

List组件

@Entry 
@Component 
struct Index { 
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
  @State isTop: boolean = true 
  build() { 
    Column() { 
      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(this.isTop ? EdgeEffect.None : EdgeEffect.Spring) 
      .onScrollIndex((firstIndex: number, lastIndex: number, centerIndex: number) => { 
        if (firstIndex === 0) { 
          this.isTop = true 
        } else { 
          this.isTop = false 
        } 
      }) 
      .width('90%') 
    } 
    .width('100%') 
    .height('100%') 
    .backgroundColor(0xDCDCDC) 
    .padding({ top: 5 }) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
分享
微博
QQ
微信
回复
2024-07-23 18:35:42
相关问题
如何去掉Scroll回弹效果
1616浏览 • 1回复 待解决
滑动组件如何实现单边spring的效果
1710浏览 • 1回复 待解决
如何List回弹效果改为阴影效果
1203浏览 • 1回复 待解决
HarmonyOS List回弹问题
565浏览 • 1回复 待解决
如何关闭Swiper组件的回弹效果
1495浏览 • 1回复 待解决
List组件如何实现多列效果
2941浏览 • 1回复 待解决
如何实现list的折叠动画效果
1358浏览 • 1回复 待解决
tabs结合scroll实现吸顶效果
2437浏览 • 1回复 待解决
Text实现scroll效果怎么弄?
6593浏览 • 1回复 待解决
HarmonyOS list选中效果实现
623浏览 • 1回复 待解决
HarmonyOS list web scroll 联动
546浏览 • 1回复 待解决