Не могу понять, как получить холст «source-atop», чтобы нарисовать последующие рисунки внутри ТОЛЬКО ранее нарисованной фигуры, а не «все» ранее формы. Как этот код. Он рисует прямоугольник «тень», затем рисует прямоугольник, чтобы действовать как «объект», затем «источник-поверх», затем я хочу, чтобы следующий рисованный прямоугольник был обрезан внутри ранее нарисованного («объект»), но вместо этого он клипы внутри «тени». Благодарю.HTML Canvas «source-atop» для рисования только ранее нарисованной фигуры
HTML
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<canvas id="theCanvas" width="500" height="300" style="border:1px solid #000000;"></canvas>
<script type="text/javascript" src="externalJS.js"></script>
</body>
</html>
JAVASCRIPT
window.addEventListener("load", eventWindowLoaded, false);
function eventWindowLoaded() {
canvasApp();
}
function canvasApp() {
var canvas = document.getElementById('theCanvas');
var context = canvas.getContext('2d');
context.fillStyle = '#999999';// this rectangle is supposed to be the "shadow"
context.fillRect(42, 42, 350, 150);
context.fillStyle = '#dddddd';// this rectangle is supposed to be on top..."
context.fillRect(35, 35, 350, 150);
context.globalCompositeOperation="source-atop";
context.fillStyle = '#00ff00';
context.fillRect(100, 100, 350, 150);//... and then this rectangle is supposed to be clipped inside the previously
drawn one... not the shadow one
}
Compositing влияет на все существующие пикселы против всех новых пикселей, так что вы не можете «слой», чтобы повлиять (или не влияют) только в последнее время существующих пикселей. Если вы хотите сложить свой композитинг, вам нужно будет сделать это на втором холсте (возможно, в памяти), а затем 'drawImage' в холсте в памяти на основной холст. – markE