2015-10-15 22 views

回答

2

FabricJS具有疊加圖像特徵 - 它是引進的第4頁上的討論,並能在這裏找到:http://fabricjs.com/fabric-intro-part-4/。他們提供的代碼示例:

canvas.add(new fabric.Circle({ radius: 30, fill: '#f55', top: 100, left: 100 })); 
canvas.setOverlayImage('../assets/jail_cell_bars.png', canvas.renderAll.bind(canvas)); 

文檔鏈接: http://fabricjs.com/docs/fabric.Canvas.html#overlayImage


在我個人的經驗,我已經得到疊加圖像的工作正好有問題......我忘了什麼我的問題是真的。出於這個原因,我所做的是循環遍歷畫布上的對象,並根據需要手動設置堆疊順序。根據畫布的大小,當然可能會有性能問題。


另一種手工方法,這將是直接選擇該對象,然後使用帶來正面的方法來確保它的頂部。

要直接選擇一個對象,您可以使用此代碼(它確實需要一個JavaScript庫lodash,因此您需要將它加載到頁面中)。

/* Find first object in canvas that has a specific property value */ 
function findObjectWithPropertyValue(canvas, propertyName, propertyValue) { 
     var condition = {}; 
     condition[propertyName] = propertyValue; 
     return _(canvas.getObjects()).filter(condition).first() 
} 

調用此函數設置propertyName的與對象的屬性要針對本項目。名字可能是一個不錯的選擇。 propertyValue是您正在定位的propertyName的值。 Fabricjs畫布中該圖層元素的對象將被返回。

注:我傳遞到這個函數的畫布,因爲我在哪裏使用這個,我一次在頁面上有多個畫布。如果你只有一個畫布,你可以稍微修改一下這個畫布,以免把它傳遞給函數。

一旦你選擇了這個功能的對象,那麼你可以簡單地將它移動到前面。

canvas.bringToFront(myObject) 

要把它放到一個完整的例子,假設你的墨鏡疊加圖像對象具有的glasses_overlay一個名稱,您的代碼會是這個樣子:

var glassesOverlayObj = findObjectWithPropertyValue(canvas, 'name', 'glasses_overlay); 
canvas.bringToFront(glassesOverlayObj); 

後,只需運行該一個新的圖像已經上傳,並在您呈現畫布之前。用戶將永遠不會看到他們無序堆放。

+0

'函數findObjectWithPropertyValue(帆布,propertyName的,的PropertyValue){ 回報_(canvas.getObjects()),其中({propertyName的:}的PropertyValue)。第() }'不起作用?(我已經嘗試過最新版本的lodash) – alexc

+0

我編輯過這個功能。如何引用屬性名稱以及_.where方法在lodash v4.0.0中已被棄用和刪除時出現錯誤。這裏還有一個小提琴在行動。 https://jsfiddle.net/PromInc/owjr9c3j/ – PromInc

相關問題