HarmonyOS 首页框架问题

目前项目首页面MainPage是用Tabs实现的,并且.scrollable(true)//允许滑动。部分代码如下:

TabContent() {  
//健康首页  
  Health({index:this.currentIndex})  
}
  • 1.
  • 2.
  • 3.
  • 4.

问题如下:

现在想Health()健康首页,实现如下面交互效果,请问应该用什么组件相结合的方式实现呢?具体需求。

1、顶部可左右滑动可点击。

2、顶部和主页面内容联动。

3、主页面内容可上下滑动,可能会嵌套Swiper。

4、假设首页面滑动到了最后一个,再滑动应该滑动到商城。

HarmonyOS
2024-09-29 11:17:20
570浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
FengTianYa

可以参考以下代码:

@Entry  
@Component  
struct TabViewDemo {  
  @State currentIndex: number = 0;  
  @State subCurrentIndex: number = 0;  
  private controller: TabsController = new TabsController();  
  private subController: TabsController = new TabsController();  
  private panOptionLeft: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Left });  
  private panOptionRight: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Right });  
  private scroller: Scroller = new Scroller()  
  private title: string[] =  
    ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj']  
  build() {  
    Tabs({ barPosition: BarPosition.End, index: this.currentIndex, controller: this.controller }) {  
      TabContent() {  
        this.HealthTab()  
      }  
      .tabBar('健康')  
      TabContent() {  
      }  
      .tabBar('商城')  
      TabContent() {  
      }  
      .tabBar('消息')  
      TabContent() {  
      }  
      .tabBar('我的')  
    }  
    .animationDuration(400)  
    .onChange((index: number) => {  
      this.currentIndex = index  
    })  
  }  
  @Builder  
  HealthTab() {  
    Column() {  
      Row() {  
        List({ space: 5, scroller: this.scroller }) {  
          ForEach(this.title, (item: string, index: number) => {  
            ListItem() {  
              Column() {  
                Text(item)  
                  .fontWeight(this.subCurrentIndex === index ? FontWeight.Bold : FontWeight.Normal)  
                Column()  
                  .height(4)  
                  .width(40)  
                  .backgroundColor(Color.Black)  
                  .visibility(this.subCurrentIndex === index ? Visibility.Visible : Visibility.None)  
              }  
              .justifyContent(FlexAlign.SpaceEvenly)  
              .width('100%')  
              .height('100%')  
            }  
            .onClick(() => {  
              this.subCurrentIndex = index  
              this.subController.changeIndex(index)  
              this.scroller.scrollToIndex(index, true, ScrollAlign.CENTER)  
            })  
            .height('100%')  
            .width('100')  
          })  
        }  
        .height('100%')  
        .scrollBar(BarState.Off)  
        .listDirection(Axis.Horizontal)  
      }  
      .alignItems(VerticalAlign.Center)  
      .height('10%')  
      Tabs({ barPosition: BarPosition.Start, controller: this.subController }) {  
        ForEach(this.title, (item: string, index: number) => {  
          if (index === 0) {  
            TabContent() {  
              Scroll() {  
                Text("我是页面 的内容")  
                  .height(1000)  
                  .width('100%')  
                  .fontSize(30)  
              }  
            }  
            .backgroundColor('#00CB87')  
            .gesture(PanGesture(this.panOptionRight)  
              .onActionEnd(() => {  
                this.controller.changeIndex(0)  
              }))  
          } else if (index === this.title.length - 1) {  
            TabContent() {  
            }  
            .backgroundColor('#ffd505fa')  
            .gesture(  
              PanGesture(this.panOptionLeft)  
                .onActionEnd(() => {  
                  this.controller.changeIndex(1)  
                })  
            )  
          } else {  
            TabContent() {  
            }  
            .backgroundColor(0x123456 + index * 50)  
          }  
        })  
      }  
      .barHeight(0)  
      .animationDuration(400)  
      .onChange((index: number) => {  
        this.subCurrentIndex = index;  
        this.scroller.scrollToIndex(index, true, ScrollAlign.CENTER)  
      })  
      .barMode(BarMode.Scrollable)  
      .width('100%')  
    }  
    .width('100%')  
  }  
}
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
分享
微博
QQ
微信
回复
2024-09-29 18:05:40


相关问题
HarmonyOS 消息首页框架实现
878浏览 • 1回复 待解决
HarmonyOS 应用首页技术选型问题
1167浏览 • 1回复 待解决
HarmonyOS 首页组件生命周期问题
681浏览 • 1回复 待解决
HarmonyOS lottie框架问题
778浏览 • 1回复 待解决
HarmonyOS Tabs框架切换问题
633浏览 • 1回复 待解决
HarmonyOS UI测试框架问题
1024浏览 • 1回复 待解决
HarmonyOS视频流缓存框架问题
876浏览 • 1回复 待解决
HarmonyOS 应用启动框架AppStartup问题
1321浏览 • 1回复 待解决
HarmonyOS 关于Rn框架搭建问题(重要)
1425浏览 • 1回复 待解决
元数据绑定框架使用问题
6941浏览 • 1回复 待解决
HarmonyOS 首页下拉刷新异常
969浏览 • 1回复 待解决
HarmonyOS 首页金刚栏滑动demo
703浏览 • 1回复 待解决
HarmonyOS 在entry里替换首页
809浏览 • 1回复 待解决
HarmonyOS 首页轮播效果实现
589浏览 • 1回复 待解决
基于加解密算法框架的规格问题
1458浏览 • 1回复 待解决
框架native侧文件读取权限问题
2718浏览 • 1回复 待解决
HarmonyOS 首页有滑动置顶组件吗?
799浏览 • 1回复 待解决