鴻蒙HarmonyOS實戰-ArkUI元件(Swiper)

蜀道山QAQ發表於2024-03-30

🚀一、Swiper

🔎1.概述

Swiper可以實現手機、平板等移動端裝置上的圖片輪播效果,支援無縫輪播、自動播放、響應式佈局等功能。Swiper輪播圖具有使用簡單、樣式可定製、功能豐富、相容性好等優點,是很多網站和移動應用中常用的輪播圖外掛。

🔎2.佈局與約束

Swiper是一個容器元件,如果自身尺寸沒有被設定,它會根據子元件大小自動調整自身尺寸。如果開發者給Swiper設定了固定尺寸,那麼在輪播過程中,Swiper的尺寸將一直保持設定的固定尺寸。如果未設定固定尺寸,Swiper會根據子元件大小自動調整自身尺寸。

🔎3.迴圈播放

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController()
  build() {
    Swiper(this.swiperController) {
      Text("0")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Gray)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("1")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Green)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("2")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Blue)
        .textAlign(TextAlign.Center)
        .fontSize(30)
    }
    .loop(true)
  }
}

image

當loop為true時,在顯示第一頁或最後一頁時,可以繼續往前切換到前一頁或者往後切換到後一頁。如果loop為false,則在第一頁或最後一頁時,無法繼續向前或者向後切換頁面。

🔎4.自動輪播

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController()
  build() {
    Swiper(this.swiperController) {
      Text("0")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Gray)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("1")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Green)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("2")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Pink)
        .textAlign(TextAlign.Center)
        .fontSize(30)
    }
    .loop(true)
    .autoPlay(true)
    .interval(2000)
  }
}

image

autoPlay為true時,會自動切換播放子元件,子元件與子元件之間的播放間隔透過interval屬性設定。interval屬性預設值為2000,單位毫秒。

🔎5.導航點樣式

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController()
  build() {
    Swiper(this.swiperController) {
      Text("0")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Gray)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("1")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Green)
        .textAlign(TextAlign.Center)
        .fontSize(30)

      Text("2")
        .width('100%')
        .height('100%')
        .backgroundColor(Color.Pink)
        .textAlign(TextAlign.Center)
        .fontSize(30)
    }
    .indicatorStyle({
      size: 30,
      left: 0,
      color: Color.Red
    })
  }
}

image

透過indicatorStyle屬性,開發者可以設定導航點相對於Swiper元件上下左右四個方位的位置,同時也可以設定每個導航點的尺寸、顏色、蒙層和被選中導航點的顏色。

🔎6.頁面切換方式

Swiper支援三種頁面切換方式:手指滑動、點選導航點和透過控制器

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController();

  build() {
    Column({ space: 5 }) {
      Swiper(this.swiperController) {
        Text("0")
          .width(250)
          .height(250)
          .backgroundColor(Color.Gray)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("1")
          .width(250)
          .height(250)
          .backgroundColor(Color.Green)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("2")
          .width(250)
          .height(250)
          .backgroundColor(Color.Pink)
          .textAlign(TextAlign.Center)
          .fontSize(30)
      }
      .indicator(true)

      Row({ space: 12 }) {
        Button('下一頁')
          .onClick(() => {
            this.swiperController.showNext(); // 透過controller切換到後一頁
          })
        Button('上一頁')
          .onClick(() => {
            this.swiperController.showPrevious(); // 透過controller切換到前一頁
          })
      }.margin(5)
    }.width('100%')
    .margin({ top: 5 })
  }
}

image

🔎7.輪播方向

vertical為true時,表示在垂直方向上進行輪播;為false時,表示在水平方向上進行輪播。vertical預設值為false

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController();

  build() {
    Column({ space: 5 }) {
      Swiper(this.swiperController) {
        Text("0")
          .width(250)
          .height(250)
          .backgroundColor(Color.Gray)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("1")
          .width(250)
          .height(250)
          .backgroundColor(Color.Green)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("2")
          .width(250)
          .height(250)
          .backgroundColor(Color.Pink)
          .textAlign(TextAlign.Center)
          .fontSize(30)
      }
      .indicator(true).vertical(false)

      Swiper(this.swiperController) {
        Text("0")
          .width(250)
          .height(250)
          .backgroundColor(Color.Gray)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("1")
          .width(250)
          .height(250)
          .backgroundColor(Color.Green)
          .textAlign(TextAlign.Center)
          .fontSize(30)
        Text("2")
          .width(250)
          .height(250)
          .backgroundColor(Color.Pink)
          .textAlign(TextAlign.Center)
          .fontSize(30)
      }
      .indicator(true).vertical(true)
    }
  }
}

image

🔎8.每頁顯示多個子頁面

Swiper支援在一個頁面內同時顯示多個子元件,透過displayCount屬性設定

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController();

  build() {
    Swiper(this.swiperController) {
      Text("0")
        .width(250)
        .height(250)
        .backgroundColor(Color.Gray)
        .textAlign(TextAlign.Center)
        .fontSize(30)
      Text("1")
        .width(250)
        .height(250)
        .backgroundColor(Color.Green)
        .textAlign(TextAlign.Center)
        .fontSize(30)
      Text("2")
        .width(250)
        .height(250)
        .backgroundColor(Color.Pink)
        .textAlign(TextAlign.Center)
        .fontSize(30)
      Text("3")
        .width(250)
        .height(250)
        .backgroundColor(Color.Blue)
        .textAlign(TextAlign.Center)
        .fontSize(30)
    }
    .indicator(true)
    .displayCount(2)
  }
}

image

🚀寫在最後

  • 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
  • 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
  • 關注小編,同時可以期待後續文章ing🚀,不定期分享原創知識。
  • 更多鴻蒙最新技術知識點,請關注作者部落格:https://t.doruo.cn/14DjR1rEY

image

相關文章