作为一个实验,我试图在不使用画布对象的情况下在 JavaScript 中复制 AS3 的 Sprite 功能。我认为使用绝对定位的 div 并操作它们的 css 属性是一件轻而易举的事,但是在 Chrome 中,动画会引入奇怪的伪影(似乎是因为重绘问题)。
我找不到我做错了什么?事实上,代码非常简单。以下是我尝试过的一些没有帮助的点:
- 使用相对定位的 div(而不是绝对定位。)
- 使用边距(与顶部和左侧属性相反。)
- 将对象直接附加到正文(而不是附加到容器 div。)
- 使用 setTimeout(相对于 requestAnimationFrame)
你可以在这里看到一个简化的小提琴:http: //jsfiddle.net/BVJYJ/2/
编辑:http: //jsfiddle.net/BVJYJ/4/
在这里,您可以在我的浏览器上看到工件:
这可能是我的设置中的一个错误(Windows 7 64 位,Chrome 21.0.1180.75)。没有其他浏览器表现出这种行为。如果有人可以评论我可能做错了什么,我将不胜感激。我更好奇这背后的原因,而不是顺便说一句的解决方法。也就是说,欢迎任何解释。:)
编辑:示例代码中有一个错误导致使用 setTimeout,即使我认为使用了 RAF。requestAnimationFrame 解决了基本转换的问题,但问题仍然存在于 CSS 转换,例如旋转。