Задать вопрос
@alkhadidzhaevich

Как правильно анимировать на fabric.js?

Всем привет, пытаюсь освоить canvas анимацию на fabricjs . Все работает, но никак не могу добиться хорошего fps. Подскажите, пожалуйста, что я делаю не так?

Для начала создают объект fabric.canvas, после чего создают массив 16x16, который заполяняю объектами fabric.rect:

var canvas = new fabric.Canvas('canvas', { selection: false });

var objects = new Array();
for (var x = 1; x <= 16; x++) {
	objects[x] = new Array();
	for (var y = 1; y <= 16; y++) {
		var rect = new fabric.Rect({
			left: (350/8)*(x-1)+40,
			top: (350/8)*(y-1-8),
			fill: 'red',
			width: 34,
			height: 34
		});
		
		objects[x][y] = {
			type: 'square',
			object: rect
		}
		canvas.add(rect);
	}
}


После чего пытаюсь их анимировать следующим образом:
var startTime = Date.now();
(function animate() {
	var current = Date.now() - startTime;
	for (var x = 1; x <= 16; x++) {
		for (var y = 1; y <= 16; y++) {
			objects[x][y].object.top = fabric.util.ease.easeOutBounce(current, (350/8/5)*(y-1-8), (350/8)*(y-1)+40+((350/8/5)*(y-1-8)*-1), 800);
		}
	}
	if (current > 800) {
		canvas.renderAll();
		return;
	}
    canvas.renderAll();
    fabric.util.requestAnimFrame(animate);
})();

Т.е. за 800мс квадратики должны упасть с ease функцией easeOutBounce
Все вроде-бы хорошо, но никак не могу добиться хорошей производительности, у меня на компьютере все равно подлагивает, а хочется что-бы эта анимация выполнялась всегда плавно, даже если квадратов будет, например, 32x32
Вот пример на JSFiddle
Подскажите, что делать?
  • Вопрос задан
  • 2984 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы