- 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
广告