Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5画布:仅外部阴影_Javascript_Html_Canvas - Fatal编程技术网

Javascript HTML5画布:仅外部阴影

Javascript HTML5画布:仅外部阴影,javascript,html,canvas,Javascript,Html,Canvas,如果我在画布上画一个矩形,并启用阴影,那么将创建内部阴影和外部阴影,但我只需要外部阴影 var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.shadowColor = 'black'; ctx.shadowBlur = 5; ctx.strokeRect(20,30,150,75); 我找到的唯一方法是ctx.clearRect(20,30150,75)。但这并不是我真正想要的,因为在我的直肠

如果我在画布上画一个矩形,并启用阴影,那么将创建内部阴影和外部阴影,但我只需要外部阴影

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");

ctx.shadowColor = 'black';
ctx.shadowBlur = 5;

ctx.strokeRect(20,30,150,75);
我找到的唯一方法是
ctx.clearRect(20,30150,75)。但这并不是我真正想要的,因为在我的直肠下可能有一些东西,我不想删除它


提前感谢,

您可以获取矩形内的像素,进行绘制并将这些像素放回原处。这样,矩形内的像素就不会改变:


要保留边框,请使用
(21、31、148、73)
作为区域(假设笔划宽度为1px)。

您也可以使用
.fillRect()
而不是
.strokeRect()
。这将创建一个实心矩形,其内部颜色定义为
.fillStyle()

您仍然会遇到覆盖矩形下方的内容的问题,因此您仍然需要pimvdb的解决方案来解决该问题。

可能是
context.shadowOffsetX
context.shadowOffsetY
var imgdata = ctx.getImageData(20, 30, 150, 75);
ctx.strokeRect(20, 30, 150, 75);
ctx.putImageData(imgdata, 20, 30);
ctx.shadowColor = 'black';
ctx.fillStyle = 'white';
ctx.shadowBlur = 5;
ctx.fillRect(20,30,150,75);