這是我的fiddle example。
在我的代碼中,我有三個div,第一個有可拖動和可調整大小的文本框,第二個div像預覽一樣。
我試圖將此預覽div的innerHTML轉換爲使用HTML 5畫布的圖像。
我發現this示例,只是這樣嘗試。
如果發生resizeEnd
,我會致電drawImage
函數。
但我可以爲我的預覽div的innerHTML製作圖像。
我的代碼有什麼問題?
我該如何解決這個問題?無法將我的div innerHTML繪製到畫布
HTML
First<br/>
<div id="container">
<div id="resizable" class="ui-widget-content">This is text Line 1<br/>
This is text Line 1<br/>
</div>
<img src="http://www.psdgraphics.com/file/abstract-background.jpg" width="400" height="150" />
</div>
<br/>Second<br/>
<div id="previewContainer">
<div id="previewText" xmlns='http://www.w3.org/1999/xhtml' class="ui-widget-content2">This is text Line 1<br/>
This is text Line 1<br/>
</div>
<img src="http://www.psdgraphics.com/file/abstract-background.jpg" width="400" height="150" />
</div>
<br/>
<canvas id="myCanvas" width="400" height="150" style="border:1px solid #d3d3d3;">
的Javascript
var DEF_HEIGHT = 100; // the #resizable default height
var $preview = $('#previewText');
$("#resizable").resizable({
containment: 'parent',
handles: "se",
aspectRatio: true,
resize: function (event, ui) {
var curHeight = (ui.size.height/DEF_HEIGHT) * 100;
$(this).css('font-size', curHeight + '%');
},
stop: function (event, ui) {
$preview.css({width: this.style.width, height: this.style.height, fontSize:this.style.fontSize});
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var data = "<svg xmlns='http://www.w3.org/2000/svg' width='400' height='150'>" +
"<foreignObject width='100%' height='100%'>" +
document.getElementById('previewText').innerHTML +
"</foreignObject>" +
"</svg>";
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
var svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 0, 0);
DOMURL.revokeObjectURL(url);
};
img.src = url;
// var img = new Image();
//img.src = document.getElementById('previewText').innerHTML;
// ctx.drawImage(img, 0, 0);
}
})
.draggable({
containment: 'parent',
start: function() {},
drag: function() {},
stop: function (e, ui) {
$preview.css($(this).position());
}
});