#鸿蒙通关秘籍#如何实现鸿蒙系统的翻页动效?

HarmonyOS
2024-12-03 11:56:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
雪域孤狼LDAP

在鸿蒙系统中,要实现翻页动效,可以遵循以下步骤:

  1. 创建包含旋转属性的文本组件。通过添加@Prop装饰器,接受父组件的动态参数。

    @Component
    struct BookPage {
      @Prop pageNum: number;
      @Prop rotateAngle: number;
      @Prop positionX: string;
      @Prop positionY: string;
    
      build() {
        Text(`${this.pageNum}`)
          .fontSize($r('app.integer.common_font_size'))
          .fontColor(Color.White)
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)
          .backgroundColor($r('app.color.common_color_dark_blue'))
          .width($r('app.string.common_text_width'))
          .height($r('app.string.common_text_height'))
          .borderRadius($r('app.integer.common_border_radius'))
          .rotate({
            x: 0,
            y: 1,
            z: 0,
            angle: this.rotateAngle,
            centerX: this.positionX,
            centerY: this.positionY,
          })
      }
    }
    
  2. 采用Stack组件来创建父组件框架,用Divider组件作为页面之间的分隔线。

    Stack() {
      Row() {
        BookPage({
          pageNum: this.pageNumTextC,
          rotateAngle: this.originalAngle,
          positionX: this.leftX,
          positionY: this.leftY
        })
        BookPage({
          pageNum: this.nextPageNumTextD,
          rotateAngle: this.originalAngle,
          positionX: this.leftX,
          positionY: this.leftY
        })
      }
      Row() {
        BookPage({
          pageNum: this.pageNumTextA,
          rotateAngle: this.rotateAngleTextA,
          positionX: this.centerX,
          positionY: this.centerY
        })
        BookPage({
          pageNum: this.animatePageNumTextB,
          rotateAngle: this.rotateAngleTextB,
          positionX: this.leftX,
          positionY: this.leftY
        })
      }
      Divider().strokeWidth(5).color(Color.White).height($r('app.string.divider_height')).vertical(true)
    }
    
  3. 使用setInterval函数定期调用pageTurningAnimate来实现连续翻页。

    aboutToAppear(): void {
      setInterval(() => {
        this.pageTurningAnimate();
      }, 1000)
    }
    
    private pageTurningAnimate() {
      animateTo(
        { duration: 700, onFinish: () => {
          this.pageNumTextA = this.animatePageNumTextB;
          this.rotateAngleTextA = 180;
          this.rotateAngleTextB = 0;
          this.animatePageNumTextB = (this.animatePageNumTextB + 1) % 8;
        }},
        () => {
          this.rotateAngleTextB = 180;
          this.nextPageNumTextD = this.animatePageNumTextB + 1;
        })
    }
    
分享
微博
QQ
微信
回复
2024-12-03 13:21:20
相关问题
鸿蒙jsUi如何制作按钮按下
8686浏览 • 3回复 待解决
HarmonyOS 属性如何打断
68浏览 • 1回复 待解决
如何设置全屏返回
2086浏览 • 1回复 待解决
HarmonyOS 是否有办法实现SVGA播放
140浏览 • 1回复 待解决