Как эксперимент, я пытаюсь реплицировать функциональность Sprite AS3 в JavaScript без использования объекта canvas. Я думал, что использование абсолютно позиционированных divs и управление их свойствами css было бы неинтересным, однако в Chrome анимация вводит странные артефакты (по-видимому, из-за проблем с перерисованием).
Я не могу найти то, что я делаю неправильно? Код, на самом деле, довольно прост. Вот несколько моментов, которые я пробовал, которые не помогли:
- Использование относительно расположенных divs (в отличие от абсолютно позиционированных.)
- Использование полей (в отличие от верхних и левых свойств.)
- Добавление объектов непосредственно к телу (в отличие от добавления к контейнеру div).
- Использование setTimeout (в отличие от requestAnimationFrame)
Здесь вы можете увидеть упрощенную скрипту: http://jsfiddle.net/BVJYJ/2/
EDIT: http://jsfiddle.net/BVJYJ/4/
И здесь вы можете увидеть артефакты в моем браузере:
Это может быть ошибка в моей настройке (Windows 7 64 бит, Chrome 21.0.1180.75). Никакие другие браузеры не демонстрируют такого поведения. Я был бы очень признателен, если бы кто-нибудь мог прокомментировать, что я могу делать неправильно. Мне больше любопытно, чем это объясняется, а не обходным путем. Тем не менее, каждое объяснение приветствуется.:)
РЕДАКТИРОВАТЬ: В образце кода произошла ошибка, которая привела к использованию setTimeout, даже когда у меня создалось впечатление, что используется RAF. requestAnimationFrame решает проблему с базовым преобразованием, но проблема остается с преобразованиями CSS, такими как вращение.