智能客服
你问我答,随时在线为你解决问题

























List有无enablePaging类似的方法?Scroll嵌套List后的enablePaging会失效吗?
- @Entry
- @Component
- struct ScrollSolution {
- private arr: number[] = new Array(30).fill(0);
- private scroller: Scroller = new Scroller();
- @State centerIndex: number = 0;
-
- build() {
- Column() {
- Scroll() {
- List({ space: 20, scroller: this.scroller }) {
- ForEach(this.arr, (item: number, index: number) => {
- ListItem() {
- Text(`Item ${index}`)
- .width('100%')
- .height(100)
- .fontSize(16)
- .textAlign(TextAlign.Center)
- .borderRadius(10)
- .backgroundColor(this.centerIndex === index ? '#0A59F7' : '#F1F3F5');
- }
- .onClick(() => {
- this.centerIndex = index;
- this.scroller.scrollToIndex(this.centerIndex, true, ScrollAlign.CENTER);
- });
- }, (item: number) => item.toString());
- }
- // 上下滚动,不能设置List的高度,否则Scroll的enablePaging会失效
- .width('100%');
- }
- .enablePaging(true) // 滑动翻页
- .friction(0.8) // 设置摩擦系数
- .width('100%')
- .height('100%');
- }.margin('20vp');
- }
- }
效果如下:

- @Entry
- @Component
- struct ListSolution {
- private arr: number[] = new Array(30).fill(0);
- private scroller: Scroller = new Scroller();
- @State centerIndex: number = 0;
- @State listHeight: number = 0;
- @State listWidth: number = 0;
- @State listOffset: number = 0; // List偏移量
-
- build() {
- Column() {
- List({ space: 20, scroller: this.scroller }) {
- ForEach(this.arr, (item: number, index: number) => {
- ListItem() {
- Text(`Item ${item + index}`)
- .width('100%')
- .height(100)
- .fontSize(16)
- .textAlign(TextAlign.Center)
- .borderRadius(10)
- .backgroundColor(this.centerIndex === index ? '#0A59F7' : '#F1F3F5');
- }
- .onClick(() => {
- this.centerIndex = index;
- // 点击某一项,此项移动至屏幕中间
- this.scroller.scrollToIndex(this.centerIndex, true, ScrollAlign.CENTER);
- });
- }, (item: number) => item.toString());
- }
- .edgeEffect(EdgeEffect.None)
- .onAreaChange((oldValue: Area, newValue: Area) => {
- console.info(`${JSON.stringify(oldValue)} ${JSON.stringify(newValue)}`);
- this.listHeight = newValue.height as number;
- this.listWidth = newValue.width as number;
- })
- .onTouch((event: TouchEvent) => {
- if (event.type === TouchType.Down) {
- // 记录手指按下时的偏移量
- this.listOffset = this.scroller.currentOffset().yOffset;
- console.info(`this.currentOffset ${this.listOffset}`);
- }
- if (event.type === TouchType.Up || event.type === TouchType.Cancel) {
- // 滑动距离超过页面三分之一则整页滚动
- let curOffset: number = this.scroller.currentOffset().yOffset - this.listOffset;
- let targetOffset = this.listOffset;
- if (Math.abs(curOffset) < this.listHeight / 3) {
- targetOffset = this.listOffset;
- } else if (curOffset > 0) {
- targetOffset = this.listOffset + this.listHeight;
- } else if (curOffset < 0) {
- targetOffset = this.listOffset - this.listHeight;
- }
- console.info(`targetOffset ${targetOffset} listOffset ${curOffset} `);
- this.scroller.scrollTo({
- xOffset: 0,
- yOffset: targetOffset,
- animation: true
- });
- }
- })
- .height('100%')
- .width('100%');
- }.margin('20vp');
- }
- }
效果如下:实现整页滑动以及点击Item自动移动至屏幕中间:

智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功