首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excanvas用于动态创建的画布元素

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

Stack Overflow用户
提问于 2009-10-28 14:00:09
回答 3查看 11.5K关注 0票数 6

Excanvas "for enternet Explorer“可以很好地处理预定义的画布元素。但是,当涉及到在脚本期间动态创建画布元素时,它将无法工作……

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2009-10-28 14:49:59

来自the documentation

如果您动态创建了canvas元素,则不会将getContext方法添加到该元素中。要使其正常工作,您需要在G_vmlCanvasManager对象上调用initElement。

代码语言:javascript
复制
var el = document.createElement('canvas');
G_vmlCanvasManager.initElement(el);
var ctx = el.getContext('2d');
票数 13
EN

Stack Overflow用户

发布于 2009-12-04 02:57:20

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

代码语言:javascript
复制
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);
票数 8
EN

Stack Overflow用户

发布于 2010-03-23 11:38:27

我想我已经找到解决这个问题的诀窍了。IE不知道" canvas“是什么,所以当你用你的javascript创建一个canvas元素时,它不能工作。

我见过的其他例子都是这样来创建画布的:

代码语言:javascript
复制
var el = document.createElement('canvas');//this doesn't work in IE

所以诀窍是通过创建一些合法的东西来欺骗IE,并在它上面调用canvas初始化。

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

代码语言:javascript
复制
<div id="canvasholder">
    <canvas id="mycanvas" width="1024" height="768" style="width:1024px;height:768px"></canvas>
</div>

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

代码语言:javascript
复制
...
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");
...

现在我在火狐和IE7上都能用了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1635419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档