2013-10-06 27 views
1

當我向組中添加一個不透明度小於1的圓時,其不透明度實際上會低於指定值。如果我不指定不透明度(即,不透明度= 1),則不會發生這種情況。這也不會發生在一個矩形。FabricJS:組中有圓圈不透明的bug?

這裏是重現此問題的代碼:

HTML

<canvas id="stage" width="400" height="300"> 

的JavaScript

var OPACITY = 0.65; 
var FILL = '#fff'; 

var canvas = new fabric.Canvas('stage', { 
    backgroundColor: '#222' 
}); 

/** 
* Rectangles 
* both appear to have the same color 
*/ 
var rect1 = new fabric.Rect({ 
    width: 40, 
    height: 40, 
    fill: FILL, 
    opacity: OPACITY, 
    left: 60, 
    top: 60 
}); 
canvas.add(rect1); 

var rect2 = new fabric.Rect({ 
    width: 40, 
    height: 40, 
    fill: FILL 
    opacity: OPACITY, 
}); 
var rect2Group = new fabric.Group([rect2], { 
    left: 120, 
    top: 60 
}); 
canvas.add(rect2Group); 

/** 
* Circles 
* the second circle is darker 
*/ 
var circle1 = new fabric.Circle({ 
    radius: 20, 
    fill: FILL, 
    opacity: OPACITY, 
    left: 60, 
    top: 120 
}); 
canvas.add(circle1); 

var circle2 = new fabric.Circle({ 
    radius: 20, 
    fill: FILL, 
    opacity: OPACITY, 
}); 
var circle2Group = new fabric.Group([circle2], { 
    left: 120, 
    top: 120 
}); 
canvas.add(circle2Group); 

這裏是JSFiddle

如果你運行它,你可以看到第二個圓圈比第一個圓圈更暗,這意味着它的不透明度更低。

我做錯了什麼,或者這是一個錯誤? (可在1.2.0和1.3.0轉載。)

+0

現在,我的解決方法是設置'FILL ='rgba(255,255,255,0.65)',並且根本不使用OPACITY。這樣,兩個圓圈(即有和沒有一組)看起來都是相同的。 – bladerunner

回答

1

它在fabric.Circle最有可能是因爲this line

// multiply by currently set alpha 
// (the one that was set by path group where this object is contained, for example) 
ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; 

這與圈子中的SVG組,IIRC的一部分來做。

在任何情況下,這絕對是一個錯誤 - 不透明度不應該乘以你的情況。我們需要更好地檢查。

請在github上提出問題。

+0

感謝kangax您的反饋。 [問題](https://github.com/kangax/fabric.js/issues/901)已被提交。 – bladerunner