Animating a DIV with JavaScript renders artifacts on Chrome

Viewed 6195

As an experiment, I am trying to replicate the Sprite functionality of AS3 in JavaScript without using the canvas object. I thought that using absolutely positioned divs and manipulating their css properties would be a no brainer, however in Chrome the animation introduces strange artifacts (seemingly because of redraw issues).

I can not find what I am doing wrong? The code is, in fact, quite simple. Here are some points that I tried which didn't help:

  • Using relatively positioned divs (as opposed to absolutely positioned.)
  • Using margins (as opposed to top & left properties.)
  • Appending objects directly to body (as opposed to appending to a container div.)
  • Using setTimeout (as opposed to requestAnimationFrame)

You can see a simplified fiddle here: http://jsfiddle.net/BVJYJ/2/

EDIT: http://jsfiddle.net/BVJYJ/4/

And here you can see the artifacts on my browser:

The artifacts in Chrome

This may be a bug in my setup (Windows 7 64 bit, Chrome 21.0.1180.75). No other browsers exhibit this behaviour. I'd greatly appreciate if someone could comment on what I could be doing wrong. I'm more curious about the reason behind this rather than a workaround btw. That said, every explanation is welcome. :)

EDIT: There was a bug in the sample code which resulted in using setTimeout even when I was under the impression that RAF was used. requestAnimationFrame solves the issue with basic transformation but the issue remains with CSS transformations such as rotation.

The artifacts in Chrome with rotation transformation.

3 Answers
Related