• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (MarqueeDynamicSyncScene)
2
3提供Marquee组件相关帧率的配置。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 本Class首批接口从API version 14开始支持。
10>
11> - MarqueeDynamicSyncScene继承自[DynamicSyncScene](arkts-apis-uicontext-dynamicsyncscene.md),对应[Marquee](arkui-ts/ts-basic-components-marquee.md)的动态帧率场景。
12
13## 属性
14
15**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
16
17**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
18
19| 名称       | 类型                                                      | 只读 | 可选 | 说明                                |
20| --------- | --------------------------------------------------------- | ---- | ---- | ---------------------------------- |
21| type      | [MarqueeDynamicSyncSceneType](./arkts-apis-uicontext-e.md#marqueedynamicsyncscenetype14) | 是   | 否   | Marquee的动态帧率场景。             |
22
23**示例:**
24
25```ts
26import { MarqueeDynamicSyncSceneType, MarqueeDynamicSyncScene } from '@kit.ArkUI';
27
28@Entry
29@Component
30struct MarqueeExample {
31  @State start: boolean = false;
32  @State src: string = '';
33  @State marqueeText: string = 'Running Marquee';
34  private fromStart: boolean = true;
35  private step: number = 10;
36  private loop: number = Number.POSITIVE_INFINITY;
37  controller: TextClockController = new TextClockController();
38  convert2time(value: number): string {
39    let date = new Date(Number(value+'000'));
40    let hours = date.getHours().toString().padStart(2, '0');
41    let minutes = date.getMinutes().toString().padStart(2, '0');
42    let seconds = date.getSeconds().toString().padStart(2, '0');
43    return hours+ ":" + minutes + ":" + seconds;
44  }
45  @State ANIMATION: ExpectedFrameRateRange = { min: 0, max: 120, expected: 30 };
46  private scenes: MarqueeDynamicSyncScene[] = [];
47
48  build() {
49    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
50      Marquee({
51        start: this.start,
52        step: this.step,
53        loop: this.loop,
54        fromStart: this.fromStart,
55        src: this.marqueeText + this.src
56      })
57        .marqueeUpdateStrategy(MarqueeUpdateStrategy.PRESERVE_POSITION)
58        .width(300)
59        .height(80)
60        .fontColor('#FFFFFF')
61        .fontSize(48)
62        .fontWeight(700)
63        .backgroundColor('#182431')
64        .margin({ bottom: 40 })
65        .id('dynamicMarquee')
66        .onAppear(()=>{
67          this.scenes = this.getUIContext().requireDynamicSyncScene('dynamicMarquee') as MarqueeDynamicSyncScene[];
68        })
69      Button('Start')
70        .onClick(() => {
71          this.start = true;
72          this.controller.start();
73          this.scenes.forEach((scenes: MarqueeDynamicSyncScene) => {
74            if (scenes.type == MarqueeDynamicSyncSceneType.ANIMATION) {
75              scenes.setFrameRateRange(this.ANIMATION);
76            }
77          });
78        })
79        .width(120)
80        .height(40)
81        .fontSize(16)
82        .fontWeight(500)
83        .backgroundColor('#007DFF')
84      TextClock({ timeZoneOffset: -8, controller: this.controller })
85        .format('hms')
86        .onDateChange((value: number) => {
87          this.src = this.convert2time(value);
88        })
89        .margin(20)
90        .fontSize(30)
91    }
92    .width('100%')
93    .height('100%')
94  }
95}
96```