Кажется, что это нормально в FF5 на Windows 7. Также кажется гладким на IE9.
Я думаю, что часть проблемы может заключаться в том, что ваш интервал слишком мал. На более медленных устройствах скорость может достигать 66 кадров в секунду, но может уменьшиться до гораздо меньшего, а затем вернуться к 66 кадрам в секунду, что дает эффект заикания.
Давая очень быстрый интервал, вы фактически приказываете ему бежать так быстро, как только возможно, и ему, очевидно, нужно отдышаться. Может, нет, хотя, может быть, есть что-то еще на работе.
Попробуйте использовать интервал в 50 мс и посмотрите, что произойдет.
И для ударов, вместо использования setInterval, посмотрите, помогает ли использование requestAnimFrame решить вашу проблему. Это может иметь те же проблемы, что и быстрый интервал.
// shim for requestAnimFrame with setTimeout fallback
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function */ callback, /* DOMElement */ element){
window.setTimeout(callback, 1000 / 60);
};
})();
// usage:
// instead of setInterval(render, 16) ....
(function animloop(){
render();
requestAnimFrame(animloop, element);
})();