1 回答
TA贡献1829条经验 获得超9个赞
画布合成操作仅适用于源画布,并且仅在绘制时起作用。如果你想在两个画布元素之间应用效果,你需要求助于普通的 CSS,比如mix-blend-mode(虽然不一样)
如果你想避免重新绘制整个背景,你可以有一个单独的(可能是屏幕外的)画布,并将其复制到你的最终图像drawImage
var bc1 = b1.getContext('2d');
// green background
bc1.fillStyle = 'green';
bc1.fillRect(0, 0, 100, 100);
var bc2 = b2.getContext('2d');
bc2.drawImage(b1, 0, 0);
// white-to-transparent gradient but lighter CO
var g = bc2.createLinearGradient(20, 0, 80, 0);
g.addColorStop(0, 'white');
g.addColorStop(1, 'transparent');
bc2.fillStyle = g;
bc2.globalCompositeOperation = 'lighter';
bc2.fillRect(20, 20, 60, 10);
// white-to-transparent gradient
bc2.globalCompositeOperation = 'source-over';
bc2.fillRect(20, 40, 60, 10);
// white-to-#ffffff00 gradient source-over
var g = bc2.createLinearGradient(20, 0, 80, 0);
g.addColorStop(0, 'white');
g.addColorStop(1, '#ffffff00');
bc2.globalCompositeOperation = 'source-over';
bc2.fillRect(20, 60, 60, 10);
// white-to-#00000000 gradient source-over
var g = bc2.createLinearGradient(20, 0, 80, 0);
g.addColorStop(0, 'white');
g.addColorStop(1, '#00000000');
bc2.globalCompositeOperation = 'source-over';
bc2.fillRect(20, 80, 60, 10);
#b1 {
display: none
}
#b2 {
position: fixed;
left: 5px;
top: 5px;
border: 1px solid red;
}
<div>
<canvas id="b1" width="100" height="100"></canvas>
<canvas id="b2" width="100" height="100"></canvas>
</div>
添加回答
举报