Javascript 用于动态创建画布元素的Excanvas

Javascript 用于动态创建画布元素的Excanvas,javascript,canvas,excanvas,Javascript,Canvas,Excanvas,Excanvas“for enternet Explorer”对于预定义的画布元素运行良好。但是当在脚本期间动态创建画布元素时,它将不起作用 有什么想法吗???来自: 如果您已经创建了画布 元素,它将不具有 添加到 元素。要让它工作,你需要 在上调用initElement G_vmlcavasmanager对象 在调用initElement之前,我将其附加到文档中,它适用于ie8、chrome和ff。我花了一段时间才弄明白 var foo = document.getElementById("t

Excanvas“for enternet Explorer”对于预定义的画布元素运行良好。但是当在脚本期间动态创建画布元素时,它将不起作用

有什么想法吗???

来自:

如果您已经创建了画布 元素,它将不具有 添加到 元素。要让它工作,你需要 在上调用initElement G_vmlcavasmanager对象


在调用initElement之前,我将其附加到文档中,它适用于ie8、chrome和ff。我花了一段时间才弄明白

var foo = document.getElementById("targetElementID");
var canvas = document.createElement('canvas');
canvas.setAttribute("width", 620);
canvas.setAttribute("height", 310);
canvas.setAttribute("class", "mapping");
foo.appendChild(canvas);
canvas = G_vmlCanvasManager.initElement(canvas);

我想我已经找到了解决这个问题的窍门。IE不知道什么是“画布”,所以当你用javascript创建画布元素时,它就不起作用了

我看到的其他示例是这样创建画布的:

var el = document.createElement('canvas');//this doesn't work in IE
所以,诀窍就是通过创建合法的东西并调用画布初始化来愚弄IE

我使用jquery为这段html执行ajax GET,然后将其插入DOM:

<div id="canvasholder">
    <canvas id="mycanvas" width="1024" height="768" style="width:1024px;height:768px"></canvas>
</div>

在ajax调用完成并插入HTML之后,我在javascript中进行画布初始化。这只是我的init函数中有趣的片段

...
canvas = $('#mycanvas').get(0);//get dom element from jquery
if(!canvas.getContext)//function doesn't exist yet
{
//we're in IE if we reach this block
//otherwise getContext already exists
$('#canvasholder').empty();
//add #mycanvas as a div instead of a canvas
//you could use document.createElement('div') instead of jquery
$('#canvasholder').append(
    '<div id="mycanvas" width="1024" height="768"></div>');
canvas = $('#mycanvas').get(0);
if(typeof G_vmlCanvasManager  != 'undefined' )
{
    canvas = G_vmlCanvasManager.initElement(canvas);
}
}
//now you're set up to draw!
context = canvas.getContext("2d");
...
。。。
canvas=$('#mycanvas').get(0)//从jquery获取dom元素
如果(!canvas.getContext)//函数尚不存在
{
//如果我们到了这个街区,我们就进去了
//否则,getContext已经存在
$(“#画布持有者”).empty();
//将#mycanvas添加为div而不是canvas
//您可以使用document.createElement('div')而不是jquery
$(“#画布持有者”)。追加(
'');
canvas=$('#mycanvas').get(0);
if(G_vmlCanvasManager的类型!=“未定义”)
{
canvas=G_vmlCanvasManager.initElement(canvas);
}
}
//现在你准备好画画了!
context=canvas.getContext(“2d”);
...

这在Firefox和IE7中都适用。

我已经尝试过这个解决方案,但在IE8中不起作用。。。!您正在使用什么版本的excanvas?显然,VML在IE8中发生了变化,所以您至少需要rev。43支持它。您还可以尝试使用X-UA-Compatible头/元标记打开IE7兼容模式。
...
canvas = $('#mycanvas').get(0);//get dom element from jquery
if(!canvas.getContext)//function doesn't exist yet
{
//we're in IE if we reach this block
//otherwise getContext already exists
$('#canvasholder').empty();
//add #mycanvas as a div instead of a canvas
//you could use document.createElement('div') instead of jquery
$('#canvasholder').append(
    '<div id="mycanvas" width="1024" height="768"></div>');
canvas = $('#mycanvas').get(0);
if(typeof G_vmlCanvasManager  != 'undefined' )
{
    canvas = G_vmlCanvasManager.initElement(canvas);
}
}
//now you're set up to draw!
context = canvas.getContext("2d");
...