2012-02-10 93 views
3

我需要绘制一个形状,然后添加阴影,但阴影覆盖填充的颜色,我需要它在它下面..我无法很好地解释情况,所以这里是一个例子jsfiddle帆布:形状+阴影

var canvas = document.getElementById("myCanvas"); 
var context = canvas.getContext("2d"); 
context.beginPath(); 
context.moveTo(170, 80); 
context.bezierCurveTo(130, 100, 130, 150, 230, 150); 
context.bezierCurveTo(250, 180, 320, 180, 340, 150); 
context.bezierCurveTo(420, 150, 420, 120, 390, 100); 
context.bezierCurveTo(430, 40, 370, 30, 340, 50); 
context.bezierCurveTo(320, 5, 250, 20, 250, 50); 
context.bezierCurveTo(200, 5, 150, 20, 170, 80); 
context.closePath(); 
context.lineWidth = 5;  
context.fillStyle = "#8ED6FF"; 
context.strokeStyle = "#0000ff";  
context.shadowColor = "#000000"; 
context.shadowBlur = 2; 
context.shadowOffsetX = 5; 
context.shadowOffsetY = 5; 
context.fill();  
context.stroke(); 

http://jsfiddle.net/j8u8p/ THX

+0

小提琴链接不起作用。 – 2012-02-10 15:01:43

+0

@DC_你使用旧的(或贫穷的)浏览器吗? – 2012-02-10 15:02:49

+0

接受一些答案@Issam Zoli - 如果你接受一些你会得到更好的答案... – 2012-02-10 15:11:40

回答

3

http://jsfiddle.net/j8u8p/11/

注:我所做的只是重新安排呼叫的上下文,并添加在globalCompositeOperation

p.s.这看起来更好:http://jsfiddle.net/j8u8p/13/

p.p.s因为你呻吟有关的差距,这是扭捏:http://jsfiddle.net/j8u8p/16/

+0

thx,所以globalCompositeOperation是解决方案:D – 2012-02-10 15:03:12

+1

确实,它允许基本的混合模式 - 像Photoshop^_^ – 2012-02-10 15:04:12

+0

但形状和阴影之间有一个空间! – 2012-02-10 15:04:41