1e41f4b71Sopenharmony_ci# <canvas> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThe **<canvas>** component provides a canvas for drawing customized graphics. For details, see [canvas](../reference/apis-arkui/arkui-js/js-components-canvas-canvas.md).
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Creating a <canvas> Component
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciCreate a **<canvas>** component in the .hml file under **pages/index**.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci```
13e41f4b71Sopenharmony_ci<!-- xxx.hml -->
14e41f4b71Sopenharmony_ci<div class="container">
15e41f4b71Sopenharmony_ci  <canvas></canvas>
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_cicanvas{
31e41f4b71Sopenharmony_ci  background-color: #00ff73;
32e41f4b71Sopenharmony_ci}
33e41f4b71Sopenharmony_ci```
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci![en-us_image_0000001232162316](figures/en-us_image_0000001232162316.png)
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci> **NOTE**
38e41f4b71Sopenharmony_ci>
39e41f4b71Sopenharmony_ci> - The default background color of the **&lt;canvas&gt;** component is the same as that of the parent component.
40e41f4b71Sopenharmony_ci>
41e41f4b71Sopenharmony_ci> - The default width and height of **&lt;canvas&gt;** are 300 px and 150 px, respectively.
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci## Adding Styles
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ciSet **width**, **height**, **background-color**, and **border** of the **&lt;canvas&gt;** component.
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci```html
50e41f4b71Sopenharmony_ci<!-- xxx.hml -->
51e41f4b71Sopenharmony_ci<div class="container">
52e41f4b71Sopenharmony_ci  <canvas></canvas>
53e41f4b71Sopenharmony_ci</div>
54e41f4b71Sopenharmony_ci```
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci```css
58e41f4b71Sopenharmony_ci/* xxx.css */
59e41f4b71Sopenharmony_ci.container{
60e41f4b71Sopenharmony_ci  flex-direction: column;
61e41f4b71Sopenharmony_ci  justify-content: center;
62e41f4b71Sopenharmony_ci  align-items: center;
63e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
64e41f4b71Sopenharmony_ci  width: 100%;
65e41f4b71Sopenharmony_ci  height: 100%;
66e41f4b71Sopenharmony_ci}
67e41f4b71Sopenharmony_cicanvas{
68e41f4b71Sopenharmony_ci  width: 500px;
69e41f4b71Sopenharmony_ci  height: 500px;  
70e41f4b71Sopenharmony_ci  background-color: #fdfdfd;  
71e41f4b71Sopenharmony_ci  border: 5px solid red;
72e41f4b71Sopenharmony_ci}
73e41f4b71Sopenharmony_ci```
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci![en-us_image_0000001231843104](figures/en-us_image_0000001231843104.png)
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci## Adding Events
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ciAdd the long press event to the **&lt;canvas&gt;** component. When the event is triggered, the value of **dataUrl** (image information returned by the **toDataURL** method) of the **&lt;canvas&gt;** component can be obtained and printed in the text area below.
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci```html
84e41f4b71Sopenharmony_ci<!-- xxx.hml -->
85e41f4b71Sopenharmony_ci<div class="container">
86e41f4b71Sopenharmony_ci  <canvas ref="canvas1" onlongpress="getUrl"></canvas>
87e41f4b71Sopenharmony_ci  <text>dataURL</text>
88e41f4b71Sopenharmony_ci  <text class="content">{{dataURL}}</text>
89e41f4b71Sopenharmony_ci</div>
90e41f4b71Sopenharmony_ci```
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci```css
94e41f4b71Sopenharmony_ci/* xxx.css */
95e41f4b71Sopenharmony_ci.container{
96e41f4b71Sopenharmony_ci  width:100%;
97e41f4b71Sopenharmony_ci  height:100%;
98e41f4b71Sopenharmony_ci  flex-direction: column;
99e41f4b71Sopenharmony_ci  justify-content: center;
100e41f4b71Sopenharmony_ci  align-items: center;
101e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
102e41f4b71Sopenharmony_ci  }
103e41f4b71Sopenharmony_ci  canvas{  
104e41f4b71Sopenharmony_ci    width: 500px;  
105e41f4b71Sopenharmony_ci    height: 500px;
106e41f4b71Sopenharmony_ci    background-color: #fdfdfd;
107e41f4b71Sopenharmony_ci    border: 5px solid red;
108e41f4b71Sopenharmony_ci    margin-bottom: 50px;
109e41f4b71Sopenharmony_ci}
110e41f4b71Sopenharmony_ci.content{
111e41f4b71Sopenharmony_ci  border: 5px solid blue;
112e41f4b71Sopenharmony_ci  padding: 10px;
113e41f4b71Sopenharmony_ci  width: 90%;
114e41f4b71Sopenharmony_ci  height: 400px; 
115e41f4b71Sopenharmony_ci  overflow: scroll;
116e41f4b71Sopenharmony_ci}
117e41f4b71Sopenharmony_ci```
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci```js
121e41f4b71Sopenharmony_ci// xxx.js
122e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
123e41f4b71Sopenharmony_ciexport default {
124e41f4b71Sopenharmony_ci  data:{
125e41f4b71Sopenharmony_ci    dataURL:null,
126e41f4b71Sopenharmony_ci  },
127e41f4b71Sopenharmony_ci  onShow(){
128e41f4b71Sopenharmony_ci    let el = this.$refs.canvas1;
129e41f4b71Sopenharmony_ci    let ctx = el.getContext("2d"); 
130e41f4b71Sopenharmony_ci    ctx.strokeRect(100,100,300,300);
131e41f4b71Sopenharmony_ci  },
132e41f4b71Sopenharmony_ci  getUrl(){
133e41f4b71Sopenharmony_ci    let el = this.$refs.canvas1
134e41f4b71Sopenharmony_ci    let dataUrl = el.toDataURL()
135e41f4b71Sopenharmony_ci    this.dataURL = dataUrl;
136e41f4b71Sopenharmony_ci    promptAction.showToast({duration:2000,message:"long press,get dataURL"})
137e41f4b71Sopenharmony_ci  }
138e41f4b71Sopenharmony_ci}
139e41f4b71Sopenharmony_ci```
140e41f4b71Sopenharmony_ci
141e41f4b71Sopenharmony_ci![en-us_image_0000001276003513](figures/en-us_image_0000001276003513.gif)
142e41f4b71Sopenharmony_ci
143e41f4b71Sopenharmony_ci> **NOTE**
144e41f4b71Sopenharmony_ci>
145e41f4b71Sopenharmony_ci> The **&lt;canvas&gt;** component cannot be created in **onInit** or **onReady**.
146