html画布阴影被应用于一切

时间:2011-01-10 18:03:50

标签: html5 canvas shadow

如果你定义了一个阴影ONCE,那么它就会从那里开始应用于画布上的所有“图形”(这就是它应该做的)。

样品: http://flanvas.com/development/flanvas/test.html

有人知道在使用它后关闭阴影的最佳做法吗?我将shadowColor设置为“rgba(0,0,0,0)”,这是一个无alpha黑色。我确信有更好的方法。

案例样本:文本也变成了阴影。我现在正在使用无alpha黑色来对抗它。 http://flanvas.com/development/flanvas/examples/filters-dropShadowFilter.html

4 个答案:

答案 0 :(得分:27)

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

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

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

// do some stuff

ctx.restore();

X& Y是您打算绘制的坐标,并且相对于坐标0,0执行您的工作。

此方法解决了缓存和恢复以前样式/值的问题,在处理渐变时也非常有用,因为它们始终相对于原点(0,0)

进行绘制

答案 1 :(得分:8)

(编辑:哎呀!我看到你用0 alpha黑色做的就是这个。)

这就是你要找的东西:

context.shadowColor = "transparent";

答案 2 :(得分:5)

在更改之前存储这些“全局”属性的旧值通常是个好主意,并使用此存储值稍后将其还原。例如:

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

// ... do some stuff

ctx.shadowColor = origShadowColor;

答案 3 :(得分:0)

我创建了一个函数,可以根据需要调用该函数重置阴影。

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