拉斐爾處理文本的能力是非常糟糕的。我最近不得不爲項目做一些類似的事情,最後我使用HTML5畫布生成圖像,然後將該圖像加載到我的項目中。
所以說,你創建你的拉斐爾矩形,然後你要生成它與您描述的圖像:
var width = myRect.getBBox().width
var height = myRect.getBBox().height
var canvas = jQuery("<canvas width="+width+"px height="+height+"px />");
var context = canvas[0].getContext("2d");
context.font = "10pt Calibri ";
context.textAlign = "left";
context.textBaseline = "top";
context.fillText("this is text", xPos, yPos);
,然後你會想要將它移動到拉斐爾:
var img = canvas[0].toDataURL("image/png"); //turns the canvas object into a png and returns the dynamic url
var bb = myRect.getBBox();
paper.image(img,bb.x,bb.y,300,400)
它不是世界上最簡單的解決方案..但我想你會發現其他選項並不是很有趣。
其他選項包括
var description = paper.text(0,0,"this is text");
它可以爲你工作好,但如果你正在做什麼東西用放大和縮小,甚至可能拖動對象,你將有一個艱難的時間。
爲您添加標記位,你可能會想,說一個功能類似
function addMarker(x,y){
var marker = paper.set();
marker.push(
paper.rect(x,y,5,20).attr({fill:"#000"}),
paper.rect(x,y,10,5).attr({fill:"#000"}),
);
}
,你會想點擊功能爲好,像
$("paper").click(function(e){
addMarker(e.offsetX,e.offsetY)
});
我希望這有助於一些。如果您需要任何幫助,請隨時發表評論。
編輯:
要刪除拉斐爾的元素,你可以使用
myElement.remove();
甚至
myElement.hide();
編輯:
我以爲你可能一直在尋找一個輸入字段......這是拉斐爾無法處理的。所以你將不得不做一些工作。
如果您創建一個輸入字段,然後將其完全放在您的拉斐爾程序的頂部,您可以實現此目的。
var textbox = $("<textarea/>");
textbox.css({"z-index" : 2, "position" : "absolute"});
textbox.css("left",myRaphaelElement.getBBox().x)
textbox.css("top",myRaphaelElement.getBBox().y)
$("body").append(textbox)
和我想象你會希望用戶能夠保存他們寫的東西..這是要在其中添加一個butotn並做類似
button.onclick(function(){
// write code here that involves the bit i wrote earlier in my post
// that takes textbox.val() as your text.
});
更好?