是'当我们有很多动画时,t canvas应该比dom操作更快
isn't canvas supposed to be faster than dom manipulation when we have a lot of animation?
我想知道我的代码出了什么问题(为什么动画如此不连贯):
<html>
<head>
</head>
<body style="background:black;margin:0;padding:0;">
<canvas id="canvas" style="background:white;width:100%;height:100%;"/>
<script>
var img=new Image();
img.onload=function(){
var c=document.getElementById('canvas');
var ctx = c.getContext('2d');
var left,top;
left=top=0;
ctx.drawImage(img,left,top,20,20);
var f=function(){
left+=1;
top+=1;
c.width=c.width;
ctx.drawImage(img,left,top,20,20);
};
setInterval(f,20);
};
img.src="http://a.wearehugh.com/dih5/aoc-h.png";
</script>
</body>
</html>
据我所知,画布应该擅长做这些事情?但是,如果我使用一个元素并操纵它的左侧和顶部,它最终会更快(不那么颠簸)。。
我的剧本有问题吗?还是这是最好的画布?
-
没有必要在每次迭代中清除整个画布。可以使用
clearRect
方法。 -
每次绘制图像时都需要缩放图像。为了避免这种情况,您可以只在不可见的画布上绘制一次,然后在可见的画布中绘制此画布。
提高可读性和性能的代码:
<html>
<head>
</head>
<body style="background:black;margin:0;padding:0;">
<canvas id="canvas" style="background:white;width:100%;height:100%;"/>
<script>
var img=new Image()
buf = document.createElement('canvas');
img.onload=function(){
var c = document.getElementById('canvas'),
ctx = c.getContext('2d'),
left = 0, top = 0,
width = 20, height = 20;
buf.width = width;
buf.height = height;
buf.getContext('2d').drawImage(img, 0, 0, width, height);
var f=function(){
ctx.clearRect(left-1, top-1, width + 1, height + 1)
left+=1;
top+=1;
ctx.drawImage(buf, left, top, width, height);
};
setInterval(f,20);
};
img.src="http://a.wearehugh.com/dih5/aoc-h.png";
</script>
</body>
</html>
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- DOM事件通过JSON转换为java
- 将DOM节点值与字符串Javascript进行比较
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 流星中DOM的繁殖
- Web应用程序性能:SVG、Canvas或Dom Manipulation
- 多平台HTML5游戏DOM+CSS与CANVAS与两者
- phantomjs使用src图像在canvas.toDataURL上抛出DOM异常18
- Javascript DOM vs. Canvas在手机游戏开发中的应用
- Uncaught Error: SecurityError: DOM Exception 18 Canvas
- html5 canvas-Javascript createImageData抛出DOM异常9,rgb数据不工作
- 是'当我们有很多动画时,t canvas应该比dom操作更快
- 仅限 Android 浏览器:canvas.toDataURL 抛出未捕获的错误:安全错误:DOM 异常 18