HTML5 Canvas 全局复合操作语法
context.globalCompositeOperation = 'destination-over';
HTML5 Canvas 全局复合操作
我们可以通过使用画布上下文的 globalCompositeOperation 属性在 HTML5 Canvas 中执行复合操作。 globalCompositeOperation 定义了画布的源状态和目标状态之间的复合操作。 destination 表示复合操作之前的画布状态,source 表示画布状态复合操作。
HTML5 Canvas 全局复合操作示例
<!DOCTYPE HTML>
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
}
#myownCanvas {
border: 1px solid #9C9898;
}
</style>
<script>
window.onload = function () {
var canvas = document.getElementById("myownCanvas");
var context = canvas.getContext("2d");
var tempCanvas = document.getElementById("tempCanvas");
var tempContext = tempCanvas.getContext("2d");
var squareWidth = 55;
var circleRadius = 35;
var startX = 10;
var startY = 30;
var rectCircleDistX = 50;
var rectCircleDistY = 50;
var exampleDistX = 150;
var exampleDistY = 140;
var arr = new Array();
arr.push("source stop");
arr.push("source in");
arr.push("source out");
arr.push("source over");
arr.push("destination stop");
arr.push("destination in");
arr.push("destination out");
arr.push("destination-over");
arr.push("lighter");
arr.push("darker");
arr.push("xor");
arr.push("copy");
//draw each of the ten operations
for (var i = 0; i < arr.length; i++) {
var thisX;
var thisY;
var thisOperation = arr[i];
//first row
if (i < 4) {
thisX = startX + (i * exampleDistX);
thisY = startY;
}
//second row
else if (i < 8) {
thisX = startX + ((i - 4) * exampleDistX);
thisY = startY + exampleDistY;
}
//third row
else {
thisX = startX + ((i - 8) * exampleDistX);
thisY = startY + (exampleDistY * 2);
}
tempContext.clearRect(0, 0, canvas.width, canvas.height);
//draw rectangle
tempContext.beginPath();
tempContext.rect(thisX, thisY, squareWidth, squareWidth);
tempContext.fillStyle = "yellow";
tempContext.fill();
//set global composite
tempContext.globalCompositeOperation = thisOperation;
//draw circle
tempContext.beginPath();
tempContext.arc(thisX + rectCircleDistX, thisY + rectCircleDistY, circleRadius, 0, 2 * Math.PI, false);
tempContext.fillStyle = "Gray";
tempContext.fill();
//set back to default
tempContext.globalCompositeOperation = "source-over";
tempContext.font = "10pt Verdana";
tempContext.fillStyle = "black";
tempContext.fillText(thisOperation, thisX, thisY + squareWidth + 45);
//copy drawing from tempCanvas onto myCanvas
context.drawImage(tempCanvas, 0, 0);
}
}
</script>
</head>
<body>
<canvas id="myownCanvas" width="578" height="430"></canvas>
<canvas id="tempCanvas" width="578" height="430" style="display:none;"></canvas>
</body>
</html>
日期:2020-04-11 23:04:09 来源:oir作者:oir
