- HTML5 教程
- HTML5 - 首頁
- HTML5 - 概述
- HTML5 - 語法
- HTML5 - 屬性
- HTML5 - 事件
- HTML5 - Web 表單 2.0
- HTML5 - SVG
- HTML5 - MathML
- HTML5 - Web 儲存
- HTML5 - Web SQL 資料庫
- HTML5 - 伺服器傳送事件
- HTML5 - WebSocket
- HTML5 - Canvas
- HTML5 - 音訊和影片
- HTML5 - 地理定位
- HTML5 - 微資料
- HTML5 - 拖放
- HTML5 - Web Workers
- HTML5 - IndexedDB
- HTML5 - Web 訊息傳遞
- HTML5 - Web CORS
- HTML5 - Web RTC
- HTML5 演示
- HTML5 - Web 儲存
- HTML5 - 伺服器傳送事件
- HTML5 - Canvas
- HTML5 - 音訊播放器
- HTML5 - 影片播放器
- HTML5 - 地理位置
- HTML5 - 拖放
- HTML5 - Web Worker
- HTML5 - Web幻燈片
- HTML5 工具
- HTML5 - SVG 生成器
- HTML5 - MathML
- HTML5 - Velocity Draw
- HTML5 - 二維碼
- HTML5 - Validator.nu 驗證
- HTML5 - Modernizr
- HTML5 - 驗證
- HTML5 - 線上編輯器
- HTML5 - 顏色程式碼生成器
- HTML5 標籤參考
- HTML5 - 問答
- HTML5 - 標籤參考
- HTML5 - 已棄用標籤
- HTML5 - 新標籤
- HTML5 資源
- HTML5 - 有用資源
- HTML5 - 討論
HTML5 Canvas - 圖層合成
HTML5 canvas 提供了合成屬性globalCompositeOperation,它會影響所有繪圖操作。
我們可以使用 globalCompositeOperation 屬性在現有形狀後面繪製新形狀,遮蓋某些區域,從畫布中清除部分內容,如下例所示。
以下是可以為 globalCompositeOperation 設定的值:
| 序號 | 屬性和描述 |
|---|---|
| 1 | source-over 這是預設設定,在現有畫布內容的頂部繪製新形狀。 |
| 2 | source-in 新形狀僅在與目標畫布重疊的地方繪製。其他所有內容都變為透明。 |
| 3 | source-out 新形狀在不與現有畫布內容重疊的地方繪製。 |
| 4 | source-atop 新形狀僅在與現有畫布內容重疊的地方繪製。 |
| 5 | lighter 兩個形狀重疊的地方,顏色由顏色值相加確定。 |
| 6 | xor 兩個形狀重疊的地方變為透明,其他所有地方正常繪製。 |
| 7 | destination-over 新形狀繪製在現有畫布內容的後面。 |
| 8 | destination-in 在新的形狀和現有的畫布內容重疊的地方保留現有的畫布內容。其他所有內容都變為透明。 |
| 9 | destination-out 在不與新形狀重疊的地方保留現有內容。 |
| 10 | destination-atop 僅在與新形狀重疊的地方保留現有畫布。新形狀繪製在畫布內容的後面。 |
| 11 | darker 兩個形狀重疊的地方,顏色由顏色值相減確定。 |
示例
以下是一個簡單的示例,它使用 globalCompositeOperation 屬性建立所有可能的合成:
<!DOCTYPE HTML>
<html>
<head>
<script type = "text/javascript">
var compositeTypes = [
'source-over','source-in','source-out','source-atop',
'destination-over','destination-in','destination-out',
'destination-atop','lighter','darker','copy','xor'
];
function drawShape() {
for (i=0;i<compositeTypes.length;i++) {
var label = document.createTextNode(compositeTypes[i]);
document.getElementById('lab'+i).appendChild(label);
var ctx = document.getElementById('tut'+i).getContext('2d');
// draw rectangle
ctx.fillStyle = "#FF3366";
ctx.fillRect(15,15,70,70);
// set composite property
ctx.globalCompositeOperation = compositeTypes[i];
// draw circle
ctx.fillStyle = "#0066FF";
ctx.beginPath();
ctx.arc(75,75,35,0,Math.PI*2,true);
ctx.fill();
}
}
</script>
</head>
<body onload = "drawShape();">
<table border = "1" align = "center">
<tr>
<td><canvas id = "tut0" width = "125" height = "125"></canvas><br/>
<label id = "lab0"></label>
</td>
<td><canvas id = "tut1" width = "125" height = "125"></canvas><br/>
<label id = "lab1"></label>
</td>
<td><canvas id = "tut2" width = "125" height = "125"></canvas><br/>
<label id = "lab2"></label>
</td>
</tr>
<tr>
<td><canvas id = "tut3" width = "125" height = "125"></canvas><br/>
<label id = "lab3"></label>
</td>
<td><canvas id = "tut4" width = "125" height = "125"></canvas><br/>
<label id = "lab4"></label>
</td>
<td><canvas id = "tut5" width = "125" height = "125"></canvas><br/>
<label id = "lab5"></label>
</td>
</tr>
<tr>
<td><canvas id = "tut6" width = "125" height = "125"></canvas><br/>
<label id = "lab6"></label>
</td>
<td><canvas id = "tut7" width = "125" height = "125"></canvas><br/>
<label id = "lab7"></label>
</td>
<td><canvas id = "tut8" width = "125" height = "125"></canvas><br/>
<label id = "lab8"></label>
</td>
</tr>
<tr>
<td><canvas id = "tut9" width = "125" height = "125"></canvas><br/>
<label id = "lab9"></label>
</td>
<td><canvas id = "tut10" width = "125" height = "125"></canvas><br/>
<label id = "lab10"></label>
</td>
<td><canvas id = "tut11" width = "125" height = "125"></canvas><br/>
<label id = "lab11"></label>
</td>
</tr>
</table>
</body>
</html>
以上示例將產生以下結果:
html5_canvas.htm
廣告