# JS30 D8 Fun with HTML5 Canvas by six
簡介:用 canvas 畫畫~
---
# 流程
- 掛事件監聽
- 設定筆觸
- 加點特效
---
# 事件監聽
- mousedown 滑鼠按下
- mousemove 滑鼠移動
- mouseup 滑鼠放開
- mouseout / mouseleave 滑鼠離開
多層 div 時建議用後者
---
# 設定畫布
取得畫布上下文: const ctx = canvas.getContext('2d');
---
# 基本筆觸設定
- strokeStyle 筆觸顏色
- lineWidth 筆觸寬度 (1.0)
- lineCap 筆觸收尾 butt 矩形 / round (延伸)圓滑 / square (延伸)矩形
- lineJoin 筆觸轉折處 round 圓滑 / bevel 有修飾拐角 / miter 無修飾拐角
---
# 下筆
- ctx.beginPath(); 開始路徑
- ctx.moveTo(lastX, lastY); 移動畫筆
- ctx.lineTo(e.offsetX, e.offsetY); 畫線到指定位置
- ctx.stroke(); 畫!
- ctx.closePath(); 結束路徑 文件上有這個,但範例沒用到
---
# 加點特效
控制筆觸顏色變化 HSL 的色相角度 => 連續遞增 + 360 度循環
控制筆觸大小在一個峰值和低谷震盪 => 加一個變數控制方向 or 週期函式 sin()
---
# 中場時間
想像力大挑戰,大家有什麼新奇的點子想完成呢?
---
# That's battle!
挑戰者出現
Benben 表示:這是我的主場,看我的 P5.js,YO!
---
# 結語
- 原生 canvas 適合小專案或是練手
- 成熟專案多半還是依賴框架
- canvas vs SVG
---
# 參考資料
- [[ Alex 宅幹嘛 ] 👨💻 深入淺出 Javascript30 快速導覽 | Day 8:Fun with HTML5 Canvas - YouTube](https://www.youtube.com/watch?v=3862i0RdKLU)
- [Canvas API - Web APIs | MDN](https://developer.mozilla.org/zh-TW/docs/Web/API/Canvas_API)
- [Canvas 教學文件 - Web APIs | MDN](https://developer.mozilla.org/zh-TW/docs/Web/API/Canvas_API/Tutorial)
{"metaMigratedAt":"2023-06-16T04:05:02.803Z","metaMigratedFrom":"Content","title":"JS30 D8 Fun with HTML5 Canvas by six","breaks":true,"contributors":"[{\"id\":\"9cfdb184-647c-4402-b7aa-519bdd1985dc\",\"add\":1194,\"del\":0}]"}