#### canvas
畫布。
| 屬性名 | 類型 | 默認值 | 說明 |
| --------------- | ----------- | ----- | ---------------------------------------- |
| canvas-id | String | | canvas 組件的唯一標識符 |
| disable-scroll | Boolean | false | 當在 canvas 中移動時且有綁定手勢事件時,禁止屏幕滾動以及下拉刷新 |
| bindtouchstart | EventHandle | | 手指觸摸動作開始 |
| bindtouchmove | EventHandle | | 手指觸摸后移動 |
| bindtouchend | EventHandle | | 手指觸摸動作結束 |
| bindtouchcancel | EventHandle | | 手指觸摸動作被打斷,如來電提醒,彈窗 |
| bindlongtap | EventHandle | | 手指長按 500ms 之后觸發,觸發了長按事件后進行移動不會觸發屏幕的滾動 |
| binderror | EventHandle | | 當發生錯誤時觸發 error 事件,detail = {errMsg: 'something wrong'} |
**注:**
1. **canvas 標簽默認寬度300px、高度225px**
2. **同一頁面中的 canvas-id 不可重復,如果使用一個已經出現過的 canvas-id,該 canvas 標簽對應的畫布將被隱藏并不再正常工作**
**示例代碼:下載**
```
<!-- canvas.wxml -->
<canvas style="width: 300px; height: 200px;" canvas-id="firstCanvas"></canvas>
<!-- 當使用絕對定位時,文檔流后邊的 canvas 的顯示層級高于前邊的 canvas -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas"></canvas>
<!-- 因為 canvas-id 與前一個 canvas 重復,該 canvas 不會顯示,并會發送一個錯誤事件到 AppService -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas" binderror="canvasIdErrorCallback"></canvas>
```
```
// canvas.js
Page({
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
onReady: function (e) {
// 使用 wx.createContext 獲取繪圖上下文 context
var context = wx.createCanvasContext('firstCanvas')
context.setStrokeStyle("#00ff00")
context.setLineWidth(5)
context.rect(0, 0, 200, 200)
context.stroke()
context.setStrokeStyle("#ff0000")
context.setLineWidth(2)
context.moveTo(160, 100)
context.arc(100, 100, 60, 0, 2 * Math.PI, true)
context.moveTo(140, 100)
context.arc(100, 100, 40, 0, Math.PI, false)
context.moveTo(85, 80)
context.arc(80, 80, 5, 0, 2 * Math.PI, true)
context.moveTo(125, 80)
context.arc(120, 80, 5, 0, 2 * Math.PI, true)
context.stroke()
context.draw()
}
})
```
相關api:[wx.createCanvasContext](https://mp.weixin.qq.com/debug/wxadoc/dev/api/canvas/create-canvas-context.html)
##### Bug & Tip
1. `tip`: `canvas` 組件是由客戶端創建的原生組件,它的層級是最高的,不能通過 z-index 控制層級。
2. `tip`: 請勿在 `scroll-view`、`swiper`、`picker-view`、`movable-view` 中使用 `canvas` 組件。
3. `tip`: `css` 動畫對 `canvas` 組件無效。
4. `bug`: 避免設置過大的寬高,在安卓下會有crash的問題
- 簡介
- 第一章 公眾號開發
- 使用微信JSSDK
- 接口權限配置
- 分享接口
- 隱藏按鈕項
- 微信支付
- 第二章 小程序開發
- 基礎知識
- 分包加載
- WXSS樣式表
- 配置
- app.json配置
- window
- tabBar
- page.json配置
- 邏輯層
- app.js
- 場景值
- page.js
- 初始化數據
- 生命周期函數
- 頁面相關事件處理函數
- 事件處理函數
- 頁面實例方法
- 路由
- 文件作用域
- 模塊化
- 視圖層
- 模板語法
- 列表渲染
- 條件渲染
- 模板
- 事件
- 引用
- WXS語法規范
- WXS數據類型
- WXS控制流程
- WXS基礎類庫
- 組件
- 視圖容器
- view
- scroll-view
- swiper
- movable-view
- cover-view
- 基礎組件
- icon
- text
- rich-text
- progress
- 表單組件
- button
- checkbox
- form
- input
- label
- picker
- picker-view
- radio
- slider
- switch
- textarea
- 導航組件
- navigator
- 媒體組件
- audio
- image
- video
- camera
- 地圖組件
- map
- 畫布組件
- canvas
- 開放能力
- web-view
- 自定義組件
- 組件模版和樣式
- Component
- 組件傳值
- 組件事件
- Behaviors
- 組件間關系
- 網絡請求
- wx.request
- 微信登錄
- 獲取 openid 和 unionid
- 獲取用戶信息
- 將 wx.request 封裝為 promise
- 上傳圖片接口封裝
- 數據存儲
- 存儲數據和讀取數據
- 獲取數據緩存信息
- 移除數據緩存
- 獲取用戶設置
- openSetting
- getSetting
- 第三章 小游戲開發
- 參考資料