javascript - 创建 Canvas 元素的最佳实践

标签 javascript html canvas element

我一直在尝试以几种不同的方式创建 Canvas 元素,想知道是否有人知道这些(或其他一些)方式中哪种方式最有效。

最基本的似乎是像这样在 html 中放置一个 Canvas 元素:

<canvas id="myCanvas" width="500", height="500"></canvas>

然后在 javascript 中:

var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');

有时我需要将所有 Canvas 业务保存在一个 .js 文件中(例如,当我想动态更改元素的宽度/高度时),我会这样做:

var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.height = '500';
canvas.width = '500';
var ctx = canvas.getContext('2d');

或者当我懒惰的时候,像这样:

document.write("<canvas id='myCanvas' width='500', height='500'></canvas>");

var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');

优点?缺点?编辑?其他选择?

最佳答案

第一个是迄今为止最好的。

第一个在效率上(略微)胜出,因为第二个和第三个导致页面不必要地重新布局。此外,如果 JavaScript 中存在错误导致后续执行停止,则页面看起来会非常奇怪。

此外,出于可访问性目的,您应该始终选择第一个。 如果有人禁用了 JavaScript,您仍然希望他们看到后备内容。即使只是说“打开 JavaScript!”或“获取现代浏览器!”

如果您使用第二种或第三种方法,用户可能永远不会知道,他们只会继续认为您的页面布局很糟糕,因为有一个奇怪的空间,应该是后备内容(或与此相关的 Canvas ) .


除此之外,方法 2 和 3 还是稍微破坏了事物的顺序。你什么时候添加 Canvas ? onload 触发后?好吧,通过触发 onload 页面只是说 DOM 已经完成了它的舞蹈并且一切准备就绪!然后你去改变 DOM!

...多么粗鲁!

当然,您可能不会使用任何依赖于 onload 中隐含 promise 的库,您使用 2 或 3 有点违反约定,但如果你可以避免它。


顺便说一句,为了开始简单的应用程序或示例,我将这个 fiddle 加入了书签:

http://jsfiddle.net/eAVMs/

其中采用了第一种方法。如果你经常使用 Canvas ,你也应该收藏这个 fiddle !

关于javascript - 创建 Canvas 元素的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060308/

相关文章:

javascript - MongoDB-通过将集合与对象数组进行比较来返回现有字段的数组

javascript - 单击按钮后动态生成 html 页面的内容

html - 如何将我自己的图像添加到链接到 HTML 和 CSS 中另一个网站的按钮?

html - 中心 float 列表

Javafx:用鼠标在ImageView上绘图

JavaScript 获取。如何处理结果

javascript - 运行 AGStoShapefile.js 时出错

python - 获取由 Beautiful Soup 标签交叉的内容的全文

javascript - 如何知道用户绘制的内容是否覆盖了大部分 Canvas 区域?

javascript - phantomjs和chrome调用canvas.toDataURL时返回不同的数据