• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Marquee
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @hddgzw-->
5<!--Designer: @pssea-->
6<!--Tester: @jiaoaozihao-->
7<!--Adviser: @HelloCrease-->
8
9跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度大于等于跑马灯组件宽度时滚动,当文本内容宽度小于跑马灯组件宽度时不滚动。
10
11
12>  **说明:**
13>
14>  该组件从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
15>
16>  为了不影响滚动帧率,建议在滚动类组件中Marquee的个数不超过4个,或者使用[Text](ts-basic-components-text.md)组件的[TextOverflow.MARQUEE](ts-appendix-enums.md#textoverflow)替代。
17>
18> 对于Marquee组件动态帧率的场景,可以使用[MarqueeDynamicSyncScene](../arkts-apis-uicontext-marqueedynamicsyncscene.md)接口实现。
19>
20> 在文本宽度小于跑马灯组件宽度时,使用[属性动画](ts-animatorproperty.md)实现滚动。
21
22## 子组件
23
2425
26
27## 接口
28
29Marquee(options: MarqueeOptions)
30
31**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37**参数:**
38
39| 参数名 | 类型 | 必填 | 说明 |
40| -------- | -------- | -------- | -------- |
41| options | [MarqueeOptions](#marqueeoptions18对象说明)<sup>18+</sup> | 是 | 配置跑马灯组件的参数。|
42
43## MarqueeOptions<sup>18+</sup>对象说明
44
45Marquee初始化参数。
46
47> **说明:**
48>
49> 为规范匿名对象的定义,API 18版本修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。
50
51**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
52
53**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
54
55**系统能力:** SystemCapability.ArkUI.ArkUI.Full
56
57**参数:**
58
59| 名称 | 类型 | 只读 | 可选 | 说明 |
60| -------- | -------- | -------- | -------- | -------- |
61| start<sup>8+</sup> | boolean | 否 | 否 | 控制跑马灯是否进入播放状态。<br/>true表示播放,false表示不播放。<br/>**说明:**<br/>有限的滚动次数播放完毕后,不可以通过改变start重置滚动次数重新开始播放。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
62| step<sup>8+</sup> | number | 否 | 是 | 滚动动画文本滚动步长。当step大于Marquee的文本宽度时,取默认值。<br/>默认值:6 <br/>单位:[vp](ts-pixel-units.md) <br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
63| loop<sup>8+</sup> | number | 否 | 是 | 设置重复滚动的次数,小于等于零时无限循环。<br/>默认值:-1<br/>**说明:**<br/>ArkTS卡片上该参数设置任意值都仅在可见时滚动一次。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
64| fromStart<sup>8+</sup> | boolean | 否 | 是 | 设置文本从头开始滚动或反向滚动。<br/>true表示从头开始滚动,false表示反向滚动。<br/>默认值:true<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
65| src<sup>8+</sup> | string | 否 | 否 | 需要滚动的文本。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
66
67## 属性
68
69除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
70
71### fontColor
72
73fontColor(value: ResourceColor)
74
75设置字体颜色。
76
77**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
78
79**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
80
81**系统能力:** SystemCapability.ArkUI.ArkUI.Full
82
83**参数:**
84
85| 参数名 | 类型                                       | 必填 | 说明       |
86| ------ | ------------------------------------------ | ---- | ---------- |
87| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 字体颜色。 |
88
89### fontSize
90
91fontSize(value: Length)
92
93设置字体大小。
94
95**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
96
97**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
98
99**系统能力:** SystemCapability.ArkUI.ArkUI.Full
100
101**参数:**
102
103| 参数名 | 类型                         | 必填 | 说明                                                         |
104| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
105| value  | [Length](ts-types.md#length) | 是   | 字体大小。fontSize为number类型时,使用fp单位。字体默认大小16fp。不支持设置百分比字符串。 |
106
107### fontWeight
108
109fontWeight(value: number | FontWeight | string)
110
111设置文本的字体粗细,设置过大可能会在不同字体下有截断。
112
113**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
114
115**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
116
117**系统能力:** SystemCapability.ArkUI.ArkUI.Full
118
119**参数:**
120
121| 参数名 | 类型                                                         | 必填 | 说明                                                         |
122| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
123| value  | number&nbsp;\|&nbsp;[FontWeight](ts-appendix-enums.md#fontweight)&nbsp;\|&nbsp;string | 是   | 文本的字体粗细,number类型取值[100,&nbsp;900],取值间隔为100,默认为400,取值越大,字体越粗。string类型仅支持number类型取值的字符串形式,例如"400",以及"bold"、"bolder"、"lighter"、"regular"、"medium",分别对应FontWeight中相应的枚举值。<br/>默认值:FontWeight.Normal |
124
125### fontFamily
126
127fontFamily(value: string | Resource)
128
129设置字体列表。
130
131**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
132
133**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
134
135**系统能力:** SystemCapability.ArkUI.ArkUI.Full
136
137**参数:**
138
139| 参数名 | 类型                                                 | 必填 | 说明                                                         |
140| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
141| value  | string&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 是   | 字体列表。默认字体'HarmonyOS Sans'。<br>应用当前支持'HarmonyOS Sans'字体和注册自定义字体[loadFontSync](../../apis-arkgraphics2d/js-apis-graphics-text.md#loadfontsync)。<br>卡片当前仅支持'HarmonyOS Sans'字体。 |
142
143### allowScale
144
145allowScale(value: boolean)
146
147设置是否允许文本缩放。
148
149**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
150
151**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
152
153**系统能力:** SystemCapability.ArkUI.ArkUI.Full
154
155**参数:**
156
157| 参数名 | 类型    | 必填 | 说明                                 |
158| ------ | ------- | ---- | ------------------------------------ |
159| value  | boolean | 是   | 是否允许文本缩放。<br/>true表示允许文本缩放,false表示不允许文本缩放。<br/>默认值:false<br/>**说明:**<br/>仅当fontSize为fp单位时生效。 |
160
161### marqueeUpdateStrategy<sup>12+</sup>
162
163marqueeUpdateStrategy(value: MarqueeUpdateStrategy)
164
165跑马灯组件属性更新后,跑马灯的滚动策略。(当跑马灯为播放状态,且文本内容宽度超过跑马灯组件宽度时,该属性生效。)
166
167**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
168
169**系统能力:** SystemCapability.ArkUI.ArkUI.Full
170
171**参数:**
172
173| 参数名 | 类型    | 必填 | 说明                                 |
174| ------ | ------- | ---- | ------------------------------------ |
175| value |[MarqueeUpdateStrategy](ts-appendix-enums.md#marqueeupdatestrategy12) | 是 | 跑马灯组件属性更新后,跑马灯的滚动策略。<br/>默认值: MarqueeUpdateStrategy.DEFAULT |
176
177## 事件
178
179### onStart
180
181onStart(event:&nbsp;()&nbsp;=&gt;&nbsp;void)
182
183当滚动的文本内容变化或者开始滚动时触发回调。
184
185**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
186
187**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
188
189**系统能力:** SystemCapability.ArkUI.ArkUI.Full
190
191**参数:**
192
193| 参数名 | 类型                                  | 必填 | 说明           |
194| ------ | ------------------------------------- | ---- | -------------- |
195| event  | &nbsp;()&nbsp;=&gt;&nbsp;void | 是   | 当滚动的文本内容变化或者开始滚动时的回调。 |
196
197### onBounce
198
199onBounce(event:&nbsp;()&nbsp;=&gt;&nbsp;void)
200
201完成一次滚动时触发,若循环次数不为1,则该事件会多次触发。
202
203**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
204
205**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
206
207**系统能力:** SystemCapability.ArkUI.ArkUI.Full
208
209**参数:**
210
211| 参数名 | 类型                                  | 必填 | 说明           |
212| ------ | ------------------------------------- | ---- | -------------- |
213| event  | &nbsp;()&nbsp;=&gt;&nbsp;void | 是   | 完成一次滚动时触发的回调。 |
214
215### onFinish
216
217onFinish(event:&nbsp;()&nbsp;=&gt;&nbsp;void)
218
219滚动全部循环次数完成时触发回调。
220
221**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
222
223**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
224
225**系统能力:** SystemCapability.ArkUI.ArkUI.Full
226
227**参数:**
228
229| 参数名 | 类型                                  | 必填 | 说明           |
230| ------ | ------------------------------------- | ---- | -------------- |
231| event  | &nbsp;()&nbsp;=&gt;&nbsp;void | 是   | 滚动全部循环次数完成时的回调。 |
232
233## 示例
234
235该示例通过设置start、step、loop、fromStart、src、[marqueeUpdateStrategy](#marqueeupdatestrategy12)(从API version 12开始)展示了跑马灯内容动态更新时运行的效果。
236
237```ts
238// xxx.ets
239@Entry
240@Component
241struct MarqueeExample {
242  @State start: boolean = false;
243  @State src: string = '';
244  @State marqueeText: string = 'Running Marquee';
245  private fromStart: boolean = true;
246  private step: number = 10;
247  private loop: number = Number.POSITIVE_INFINITY;
248  controller: TextClockController = new TextClockController();
249
250  convert2time(value: number): string {
251    let date = new Date(Number(value + '000'));
252    let hours = date.getHours().toString().padStart(2, '0');
253    let minutes = date.getMinutes().toString().padStart(2, '0');
254    let seconds = date.getSeconds().toString().padStart(2, '0');
255    return hours + ":" + minutes + ":" + seconds;
256  }
257
258  build() {
259    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
260      Marquee({
261        start: this.start,
262        step: this.step,
263        loop: this.loop,
264        fromStart: this.fromStart,
265        src: this.marqueeText + this.src
266      })
267        .marqueeUpdateStrategy(MarqueeUpdateStrategy.PRESERVE_POSITION)
268        .width('300vp')
269        .height('80vp')
270        .fontColor('#FFFFFF')
271        .fontSize('48fp')
272        .allowScale(true) // 当fontSize为‘fp’单位且想要Marquee组件文本跟随系统字体大小缩放,可以设置该属性为true
273        .fontWeight(700)
274        .fontFamily('HarmonyOS Sans') // 不想跟随主题字体可设置该属性为默认字体'HarmonyOS Sans'
275        .backgroundColor('#182431')
276        .margin({ bottom: '40vp' })
277        .onStart(() => {
278          console.info('Succeeded in completing the onStart callback of marquee animation');
279        })
280        .onBounce(() => {
281          console.info('Succeeded in completing the onBounce callback of marquee animation');
282        })
283        .onFinish(() => {
284          console.info('Succeeded in completing the onFinish callback of marquee animation');
285        })
286      Button('Start')
287        .onClick(() => {
288          this.start = true
289          // 启动文本时钟
290          this.controller.start();
291        })
292        .width('120vp')
293        .height('40vp')
294        .fontSize('16fp')
295        .fontWeight(500)
296        .backgroundColor('#007DFF')
297      TextClock({ timeZoneOffset: -8, controller: this.controller })
298        .format('hms')
299        .onDateChange((value: number) => {
300          this.src = this.convert2time(value);
301        })
302        .margin('20vp')
303        .fontSize('30fp')
304    }
305    .width('100%')
306    .height('100%')
307  }
308}
309```
310
311![marquee](figures/marquee.gif)