通常情況下,對象相對於畫布的位置可以從它的.left
和.top
屬性中獲得,但如果對象位於選擇/組中,則這些屬性相對於該組而言。有沒有辦法讓他們的位置相對於畫布?如何獲取組中對象的畫布相對位置?
回答
當一個對象是一組裏面,它的座標相對於畫布將取決於集團的起源(和對象的原點也是如此)。
可以說我們有這段代碼,它有一個矩形和一個圓圈添加到一個組中。
var canvas = new fabric.Canvas(document.getElementById('c'));
var rect = new fabric.Rect({
width: 100,
height: 100,
left: 50,
top: 50,
fill: 'rgba(255,0,0,0.5)'
});
var circle = new fabric.Circle({
radius: 50,
left: 175,
top: 75,
fill: '#aac'
});
var group = new fabric.Group([rect, circle],{
originX: 'center',
originY: 'center'
});
canvas.add(group);
canvas.renderAll();
以下是這三種情況下可能用於定心組:
原點設置爲中心組的(如在上面的代碼中):
如下面的圖所示,
rect.left
給我們物體的左邊距組的中心的距離。rect.group.left
給我們從畫布左邊到組的中心距離。所以從左帆布的矩形的距離=
rect.left + rect.group.left
(http://jsfiddle.net/uue3hcj6/3/)組地被設置爲頂部/左側(也默認設置)
rect.left
給我們距離左側的物體離開組的中心。rect.group.left
給我們從畫布左側的組的左側距離。現在要計算剩餘距離,我們必須增加組的一半寬度。所以RECT的距離從左帆布=
rect.left + rect.group.left
組的+rect.group.width/2
(http://jsfiddle.net/uue3hcj6/6/)原點被設置爲底/右
rect.left
給我們留下對象的距離從該組的中心。rect.group.left
給了我們從畫布左側開始的組右側距離。現在要計算總距離,我們必須減去組的一半寬度。所以RECT的距離從左帆布=
rect.left + rect.group.left
-rect.group.width/2
(http://jsfiddle.net/uue3hcj6/7/)
注意:類似的情況下是可能的對象爲好。
解決方法是考慮組寬度。該object.left
相對於集團的中心,而不是它的左側,因此,我們採取group.width/2
:
var canvas = new fabric.Canvas(document.getElementById('c'));
var rect = new fabric.Rect({
width: 100,
height: 100,
left: 50,
top: 50,
fill: 'rgba(255,0,0,0.5)'
});
var circle = new fabric.Circle({
radius: 50,
left: 150,
top: 75,
fill: '#aac'
});
canvas.add(rect);
canvas.add(circle);
canvas.renderAll();
function getPOS(){
var group = canvas.getActiveGroup();
if (group == null) {
var pos = rect.left;
}
else {
var pos = rect.group.left + rect.group.width/2 + rect.left;
}
alert("Position of rect from left:"+pos);
}
必須解決這一問題的另一種方法... 我必須找到在JSON數據畫布圖像,所以我的代碼是:
let findItemByType = function(source, type, rX, rY)
{
rX = rX ? rX : 0;
rY = rY ? rY : 0;
let objs = [];
source.forEach(function(item){
if (item.type === type){
item.rX = rX + item.left;
item.rY = rY + item.top;
objs.push(item);
}
else {
if (item.objects)
{
item.rX = rX;
item.rY = rY;
let subresult = findItemByType(item.objects,
type,
item.rX + item.left + item.width/2,
item.rY + item.top + item.height/2);
if (subresult){
objs = objs.concat(subresult);
}
}
}
});
return objs;
}
let images = findItemByType(canvas.toJSON().objects, "image", 0, 0);
此代碼應把所有圖像對象的數組,他們應該有rX和rY屬性,它們是圖像的相對位置。
- 1. 畫布相對位置
- 2. WPF畫布相對位置
- 3. 獲取相對於畫布拖動後的畫布元素的位置
- 4. 如何使對象在html5畫布中對齊一個位置?
- 5. HTML5畫布 - 旋轉後如何獲得對象的絕對位置?
- 6. 如何獲取與放置事件的位置相對應的範圍對象?
- 7. 如何在iOS中獲取對象相對於窗口的位置?
- 8. jsAnim:獲取對象位置
- 9. 如何使用相對/絕對定位來定位畫布
- 10. 如何獲得相對於主屏幕的對象位置
- 11. 如何將點添加到畫布圖上的相對位置?
- 12. Javascript/html5 2d畫布上下文 - 獲取X,Y相對於畫布(與轉換對象相對)
- 13. 獲取可拖動對象的位置,相對於一個div
- 14. 獲取相對位置父刪除對象jQuery UI的
- 15. 如何獲取tkinter畫布中對象的座標?
- 16. 當動畫在android中完成時獲取對象的位置
- 17. 爲屏幕空間獲取世界位置到畫布位置 - 相機畫布
- 18. JavaScript/HTML5 - 獲取畫布對象文本?
- 19. 使用fabric js獲取畫布對象
- 20. 獲取網格佈局中對象的位置
- 21. 如何佈置「相對」而不是絕對位置的項目?
- 22. 當畫布大小相對時,在Canvas上獲取正確的鼠標位置?
- 23. 我如何獲得我的數組中的對象的位置?
- 24. 可可:獲取NSWindow的相對位置
- 25. 獲取相對的屏幕位置
- 26. 相對佈局位置
- 27. jquery動畫位置 - 絕對vs相對
- 28. 如何在另一個對象的座標系中獲取對象位置THREE.js
- 29. 如何在UIView對象中獲取對象的位置和大小c
- 30. 如何獲得佈局相對於屏幕的位置
這是你在找什麼? http://jsfiddle.net/uue3hcj6/3/正如你所說,他們相對於這個組來說,你可以使用該組的左邊和上邊來找到畫布上的絕對位置。 –
這似乎不適用於選擇:http://jsfiddle.net/uue3hcj6/4/ –
@SwapnilJain你知道爲什麼在第二個值不起作用? –