创建画布元素的最佳做法
best practice for creating a canvas element
我一直在尝试以几种不同的方式创建画布元素,并且想知道是否有人知道哪种(或其他)方式最有效。
最基本的似乎是在 HTML 中放置一个 canvas 元素,如下所示:
<canvas id="myCanvas" width="500", height="500"></canvas>
然后在 JavaScript 中:
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
有时我需要将所有画布 biznass 保存在一个.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!"或"获取现代浏览器!"
如果您使用第二种或第三种方法,用户可能永远不会知道,他们将继续认为您很糟糕的页面布局,因为有一个奇怪的空间,回退内容(或画布)应该在那里。
即使除此之外,方法 2 和 3 也稍微打破了事情的顺序。何时添加画布?onload
火灾之后?好吧,通过onload
开火,页面只是说 DOM 已经完成了它的舞蹈,一切都准备好了!然后你去改变 DOM!
。多么粗鲁!
当然,您可能不会使用任何依赖于 onload
中隐含承诺的库,即通过使用 2 或 3 来打破约定,但如果可以避免它,这是不必要的违反惯例。
顺便说一下,对于简单应用程序或示例的开始,我已将此小提琴添加为书签:
http://jsfiddle.net/eAVMs/
它使用第一种方法。如果您经常使用画布,也应该为这个小提琴添加书签!
document.write("<canvas id='myCanvas' width='500', height='500'></canvas>");
是 Id 警告的唯一方法。使用document.write
通常被认为是任意创建元素的不良做法。
我可以在这里重复为什么,但这个答案很好地解释了它。
另外两种方法是完全有效且良好的。这实际上只是一个偏好问题。通常,我会创建一个画布标签,除非我需要临时画布来执行某些操作,其中 Ill 使用 createElement
方法。
除此之外,它实际上只是一个偏好问题,总体上不会以任何方式影响性能。
- 从数组中删除元素的最佳方法是:javascript/jquery
- 列出没有 mysql 的元素的最佳方法是什么
- 列出每行2个元素的最佳方式是按角度重复ng
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- 在保持元素一致性的同时旋转数组元素的最佳方式'id
- 使用 V8 从密集数组中删除元素的最佳方法是什么
- 迭代JSON对象并将元素打印到屏幕上的最佳方式是什么
- 复制元素的最佳方式是:只复制元素的类型和属性
- 将元素保留在 DIV 中而不继承页面样式的最佳方法
- 使用 jQuery 创建嵌套 HTML 元素的最佳方式
- 创建画布元素的最佳做法
- 在 JavaScript 中创建元素的最佳方法
- 使用innerHTML想法添加大量html元素的最佳方法是什么
- 当文档中的单个元素准备就绪时触发事件的最佳方法
- 检查元素是否有类的最佳方法是什么
- 删除 js 数组中的 html 元素的最佳方法
- 使用 JavaScript 将 DOM 元素添加到 Body 的最佳方法
- 在 DOM 中测试元素的最佳方法是什么?
- jQuery中根据其数据属性包装元素的最佳方法是什么?
- 在 jquery 中动态创建元素列表的最佳实践