html canvas shadow应用于所有内容

jmo0nnb3  于 2023-10-14  发布在  其他
关注(0)|答案(5)|浏览(116)

如果你定义了一个阴影,那么它将应用于画布上的所有“图形”(这是它应该做的)。
样本:http://flanvas.com/development/flanvas/test.html
有没有人知道在使用阴影后关闭它的最佳做法?我将shadowColor设置为“rgba(0,0,0,0)”,这是一个无alpha的黑色。我肯定有更好的办法。
案例示例:文字也有了影子。我现在用的是无阿尔法黑来对付这个。http://flanvas.com/development/flanvas/examples/filters-dropShadowFilter.html

ws51t4hk

ws51t4hk1#

通过使用savetranslaterestore,您可以执行任务而无需担心样式更改,例如。

ctx.save();
ctx.translate(X,Y);

ctx.shadowColor = 'rgba(255, 0, 0, 0.5)';

// do some stuff

ctx.restore();

这里XY是你想要画的坐标,你可以相对于坐标0,0来画。
此方法解决了缓存和恢复以前的样式/值的问题,并且在处理渐变时也非常有用,因为它们总是相对于原点(0,0)绘制

vkc1a9a2

vkc1a9a22#

(EDIT:哎呀!我看到你已经用0阿尔法黑做了什么。)
这就是你一直在寻找的:

context.shadowColor = "transparent";
3lxsmp7m

3lxsmp7m3#

通常,在更改这些“全局”属性之前存储其旧值并在以后使用此存储值来恢复它是一个好主意。范例:

var origShadowColor = ctx.shadowColor;
ctx.shadowColor = 'rgba(255, 0, 0, 0.5)';

// ... do some stuff

ctx.shadowColor = origShadowColor;
qij5mzcb

qij5mzcb4#

我创建了一个函数,如果需要的话,我可以调用它来重置阴影。

resetShadow() {
    this.ctx.shadowOffsetX = 0;
    this.ctx.shadowOffsetY = 0;
    this.ctx.shadowColor = "transparent";
}
zu0ti5jz

zu0ti5jz5#

如果你在一个新的画布上下文上console.log(ctx.shadowColor, ctx.shadowBlur),而不被修改,你可以看到颜色的默认值为rgba(0, 0, 0, 0),模糊的默认值为0
执行ctx.save()ctx.restore()也可以做到这一点,be的开销更大,因为它必须为您执行的每次保存保存保存所有上下文。
所以你做得对,技术上来说没有更好的方法了。

相关问题