1e41f4b71Sopenharmony_ci# <marquee> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThe **<marquee>** component displays single-line scrolling text. For details, see [marquee](../reference/apis-arkui/arkui-js/js-components-basic-marquee.md).
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Creating a <marquee> Component
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciCreate a **<marquee>** component in the .hml file under **pages/index**.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci```html
13e41f4b71Sopenharmony_ci<!-- xxx.hml -->
14e41f4b71Sopenharmony_ci<div class="container">
15e41f4b71Sopenharmony_ci  <marquee style="width: 100%;height: 80px; color: #ffffff; background-color: #0820ef;padding-left: 200px;">It's a racing lamp.</marquee>
16e41f4b71Sopenharmony_ci</div>
17e41f4b71Sopenharmony_ci```
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci```css
21e41f4b71Sopenharmony_ci/* xxx.css */
22e41f4b71Sopenharmony_ci.container {
23e41f4b71Sopenharmony_ci  width: 100%;
24e41f4b71Sopenharmony_ci  height: 100%;
25e41f4b71Sopenharmony_ci  flex-direction: column;
26e41f4b71Sopenharmony_ci  justify-content: center;
27e41f4b71Sopenharmony_ci  align-items: center;
28e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
29e41f4b71Sopenharmony_ci}
30e41f4b71Sopenharmony_ci```
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci![en-us_image_0000001231683172](figures/en-us_image_0000001231683172.png)
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci## Setting Attributes and Styles
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ciSet the **color** and **font-weight** attributes to define the color, font weight, and border style of marquee text.
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ci```html
41e41f4b71Sopenharmony_ci<!-- xxx.hml -->
42e41f4b71Sopenharmony_ci<div class="container">
43e41f4b71Sopenharmony_ci <marquee class="custommarquee">It's a racing lamp.</marquee>
44e41f4b71Sopenharmony_ci</div>
45e41f4b71Sopenharmony_ci```
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci```css
49e41f4b71Sopenharmony_ci/* xxx.css */
50e41f4b71Sopenharmony_ci.container {
51e41f4b71Sopenharmony_ci  width: 100%;
52e41f4b71Sopenharmony_ci  height: 100%;
53e41f4b71Sopenharmony_ci  flex-direction: column;
54e41f4b71Sopenharmony_ci  justify-content: center;
55e41f4b71Sopenharmony_ci  align-items: center;
56e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
57e41f4b71Sopenharmony_ci}
58e41f4b71Sopenharmony_ci.custommarquee {
59e41f4b71Sopenharmony_ci  width: 100%;
60e41f4b71Sopenharmony_ci  height: 80px;
61e41f4b71Sopenharmony_ci  padding: 10px;
62e41f4b71Sopenharmony_ci  margin: 20px;
63e41f4b71Sopenharmony_ci  border: 4px solid #6712f1;
64e41f4b71Sopenharmony_ci  border-radius: 20px;
65e41f4b71Sopenharmony_ci  font-size: 40px;
66e41f4b71Sopenharmony_ci  color: #ffffff;  font-weight: bolder;
67e41f4b71Sopenharmony_ci  font-family: serif;
68e41f4b71Sopenharmony_ci  background-color: #1567f3;
69e41f4b71Sopenharmony_ci}
70e41f4b71Sopenharmony_ci```
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci![en-us_image_0000001275803193](figures/en-us_image_0000001275803193.png)
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ciSet the **scrollamount**, **loop**, and **direction** attributes to define the maximum scroll length, number of scrolling times, and text scrolling direction.
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci```html
78e41f4b71Sopenharmony_ci<!-- xxx.hml -->
79e41f4b71Sopenharmony_ci<div class="tutorial-page">
80e41f4b71Sopenharmony_ci  <div class="mymarquee">
81e41f4b71Sopenharmony_ci    <marquee loop="{{loopval}}" scrollamount="{{scroll}}" direction="{{isleft}}" class="marqueetext" id="testmarquee" onclick="makestart">
82e41f4b71Sopenharmony_ci      Life is a journey, not the destination.
83e41f4b71Sopenharmony_ci    </marquee>
84e41f4b71Sopenharmony_ci  </div>
85e41f4b71Sopenharmony_ci  <div style="width: 600px;height: 150px;flex-direction: row;justify-content: space-around;">
86e41f4b71Sopenharmony_ci    <button onclick="setleft"  value="left"></button>
87e41f4b71Sopenharmony_ci    <button onclick="setright" value="right"></button>
88e41f4b71Sopenharmony_ci  </div>
89e41f4b71Sopenharmony_ci</div>
90e41f4b71Sopenharmony_ci```
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci```css
94e41f4b71Sopenharmony_ci/* xxx.css */
95e41f4b71Sopenharmony_ci.tutorial-page {
96e41f4b71Sopenharmony_ci  width: 750px;
97e41f4b71Sopenharmony_ci  height: 100%;
98e41f4b71Sopenharmony_ci  flex-direction: column;
99e41f4b71Sopenharmony_ci  align-items: center;
100e41f4b71Sopenharmony_ci  justify-content: center;
101e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
102e41f4b71Sopenharmony_ci}
103e41f4b71Sopenharmony_ci.marqueetext {
104e41f4b71Sopenharmony_ci  color: #ffffff;
105e41f4b71Sopenharmony_ci  font-family: serif;
106e41f4b71Sopenharmony_ci  font-size: 37px;
107e41f4b71Sopenharmony_ci}
108e41f4b71Sopenharmony_ci.mymarquee {
109e41f4b71Sopenharmony_ci  margin-top: 20px;
110e41f4b71Sopenharmony_ci  width:100%;
111e41f4b71Sopenharmony_ci  height: 100px;
112e41f4b71Sopenharmony_ci  margin-left: 50px;
113e41f4b71Sopenharmony_ci  margin-right: 50px;
114e41f4b71Sopenharmony_ci  border: 1px solid #6712f1;
115e41f4b71Sopenharmony_ci  background-color: #1567f3;
116e41f4b71Sopenharmony_ci  border-radius: 15px;
117e41f4b71Sopenharmony_ci  align-items: center;
118e41f4b71Sopenharmony_ci}
119e41f4b71Sopenharmony_cibutton{
120e41f4b71Sopenharmony_ci  width: 200px;
121e41f4b71Sopenharmony_ci  height: 80px;
122e41f4b71Sopenharmony_ci  margin-top: 100px;
123e41f4b71Sopenharmony_ci}
124e41f4b71Sopenharmony_ci```
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci```js
128e41f4b71Sopenharmony_ci// xxx.js
129e41f4b71Sopenharmony_ciexport default {
130e41f4b71Sopenharmony_ci  private: {
131e41f4b71Sopenharmony_ci    loopval: -1,
132e41f4b71Sopenharmony_ci    scroll: 10,    
133e41f4b71Sopenharmony_ci    isleft: "left",
134e41f4b71Sopenharmony_ci  },
135e41f4b71Sopenharmony_ci  onInit(){
136e41f4b71Sopenharmony_ci  },
137e41f4b71Sopenharmony_ci  setleft(e) {
138e41f4b71Sopenharmony_ci    this.isleft = "left"
139e41f4b71Sopenharmony_ci  },
140e41f4b71Sopenharmony_ci  setright(e) {
141e41f4b71Sopenharmony_ci    this.isleft = "right"
142e41f4b71Sopenharmony_ci  },
143e41f4b71Sopenharmony_ci  makestart(e) {
144e41f4b71Sopenharmony_ci    this.$element('testmarquee').start()
145e41f4b71Sopenharmony_ci  }
146e41f4b71Sopenharmony_ci}
147e41f4b71Sopenharmony_ci```
148e41f4b71Sopenharmony_ci
149e41f4b71Sopenharmony_ci> **NOTE**
150e41f4b71Sopenharmony_ci>
151e41f4b71Sopenharmony_ci> When the value of **loop** is less than or equal to 0, the marquee scrolls continuously. If **loop** is not set, the default value **-1** is used.
152e41f4b71Sopenharmony_ci
153e41f4b71Sopenharmony_ci![en-us_image_0000001227701867](figures/en-us_image_0000001227701867.gif)
154e41f4b71Sopenharmony_ci
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci## Example Scenario
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ciIn this example, you can control the scrolling of marquee text.
159e41f4b71Sopenharmony_ci
160e41f4b71Sopenharmony_ciSet **loop** to **1**. When scrolling ends, trigger a **finish** event to increase the number of scrolling times by 1 and change the font color to a random color. Then, call the **start** method to start scrolling again.
161e41f4b71Sopenharmony_ci
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci```html
164e41f4b71Sopenharmony_ci<!-- xxx.hml -->
165e41f4b71Sopenharmony_ci<div class="tutorial-page">
166e41f4b71Sopenharmony_ci  <div class="mymarquee">
167e41f4b71Sopenharmony_ci    <marquee  style="color: {{color1}}" loop="{{loopval}}" scrollamount="{{scroll}}" direction="{{isleft}}" class="marqueetext" 
168e41f4b71Sopenharmony_ci    id="testmarquee" onfinish="setfinish">
169e41f4b71Sopenharmony_ci      Life is a journey, not the destination.
170e41f4b71Sopenharmony_ci    </marquee>
171e41f4b71Sopenharmony_ci  </div>
172e41f4b71Sopenharmony_ci  <div style="width: 600px;height: 150px;flex-direction: row;justify-content: space-around;">
173e41f4b71Sopenharmony_ci    <button onclick="makestart"  value="start"></button>
174e41f4b71Sopenharmony_ci    <button onclick="makestop" value="stop"></button>
175e41f4b71Sopenharmony_ci  </div>
176e41f4b71Sopenharmony_ci</div>
177e41f4b71Sopenharmony_ci```
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ci
180e41f4b71Sopenharmony_ci```css
181e41f4b71Sopenharmony_ci/* xxx.css */
182e41f4b71Sopenharmony_ci.tutorial-page {
183e41f4b71Sopenharmony_ci  width: 750px;
184e41f4b71Sopenharmony_ci  height: 100%;
185e41f4b71Sopenharmony_ci  flex-direction: column;
186e41f4b71Sopenharmony_ci  align-items: center;
187e41f4b71Sopenharmony_ci  justify-content: center;
188e41f4b71Sopenharmony_ci}
189e41f4b71Sopenharmony_ci.marqueetext {
190e41f4b71Sopenharmony_ci  font-size: 37px;
191e41f4b71Sopenharmony_ci}
192e41f4b71Sopenharmony_ci.mymarquee {
193e41f4b71Sopenharmony_ci  margin-top: 20px;
194e41f4b71Sopenharmony_ci  width:100%;
195e41f4b71Sopenharmony_ci  height: 100px;
196e41f4b71Sopenharmony_ci  margin-left: 50px;
197e41f4b71Sopenharmony_ci  margin-right: 50px;
198e41f4b71Sopenharmony_ci  border: 1px solid #dc0f27;
199e41f4b71Sopenharmony_ci  border-radius: 15px;
200e41f4b71Sopenharmony_ci  align-items: center;
201e41f4b71Sopenharmony_ci}
202e41f4b71Sopenharmony_cibutton{
203e41f4b71Sopenharmony_ci  width: 200px;
204e41f4b71Sopenharmony_ci  height: 80px;
205e41f4b71Sopenharmony_ci  margin-top: 100px;
206e41f4b71Sopenharmony_ci}
207e41f4b71Sopenharmony_ci```
208e41f4b71Sopenharmony_ci
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci```js
211e41f4b71Sopenharmony_ci// xxx.js
212e41f4b71Sopenharmony_ciexport default {
213e41f4b71Sopenharmony_ci  private: {
214e41f4b71Sopenharmony_ci    loopval: 1,
215e41f4b71Sopenharmony_ci    scroll: 8,
216e41f4b71Sopenharmony_ci    color1: 'red'
217e41f4b71Sopenharmony_ci  },
218e41f4b71Sopenharmony_ci  onInit(){
219e41f4b71Sopenharmony_ci  },
220e41f4b71Sopenharmony_ci  setfinish(e) {
221e41f4b71Sopenharmony_ci    this.loopval=  this.loopval + 1,
222e41f4b71Sopenharmony_ci    this.r = Math.floor(Math.random()*255),
223e41f4b71Sopenharmony_ci    this.g = Math.floor(Math.random()*255),
224e41f4b71Sopenharmony_ci    this.b = Math.floor(Math.random()*255),
225e41f4b71Sopenharmony_ci    this.color1 = 'rgba('+ this.r +','+ this.g +','+ this.b +',0.8)',
226e41f4b71Sopenharmony_ci    this.$element('testmarquee').start(),
227e41f4b71Sopenharmony_ci    this.loopval=  this.loopval - 1
228e41f4b71Sopenharmony_ci  },
229e41f4b71Sopenharmony_ci  makestart(e) {
230e41f4b71Sopenharmony_ci    this.$element('testmarquee').start()
231e41f4b71Sopenharmony_ci  },
232e41f4b71Sopenharmony_ci  makestop(e) {
233e41f4b71Sopenharmony_ci    this.$element('testmarquee').stop()
234e41f4b71Sopenharmony_ci  }
235e41f4b71Sopenharmony_ci}
236e41f4b71Sopenharmony_ci```
237e41f4b71Sopenharmony_ci
238e41f4b71Sopenharmony_ci![en-us_image_0000001176075554](figures/en-us_image_0000001176075554.gif)
239