анимировать руками одно изображение циклично

This commit is contained in:
2021-11-29 12:44:22 +03:00
parent c208377ddc
commit fa9afa1fcd

View File

@@ -9,6 +9,9 @@ function Изображения(события, виды, анимации, ко
this.задано = {}; this.задано = {};
this.элементы = {}; this.элементы = {};
события.подписать(this); события.подписать(this);
this.омер = 0;
this._анимация = null;
}; };
// Ключи и события. // Ключи и события.
@@ -150,18 +153,31 @@ function Изображения(события, виды, анимации, ко
if (анимация) if (анимация)
{ {
let за = анимации.задано[анимация]; let за = анимации.задано[анимация];
let в = за["воспроизведений"]; let в = Number(за["воспроизведений"]);
let к = за["кадров"]; let к0 = Number(за["кадр.0"]);
let с = за["скорость"]; let к1 = Number(за["кадр.1"]);
let д0 = за["диапазон.0"]; let с = Number(за["скорость"]);
let д1 = за["диапазон.1"]; let д0 = Number(за["диапазон.0"]);
let д2 = за["диапазон.2"]; let д1 = Number(за["диапазон.1"]);
let д3 = за["диапазон.3"]; let д2 = Number(за["диапазон.2"]);
let д3 = Number(за["диапазон.3"]);
if (в != null && к != null && с != null && д0 != null && д1 != null && д2 != null && д3 != null) if (в != null && к0 != null && к1 != null && с != null && д0 != null && д1 != null && д2 != null && д3 != null)
{ {
let кадр = [к0, к1];
let диапазон = [д0, д1, д2, д3]; let диапазон = [д0, д1, д2, д3];
/**/console.debug("ИГР Изображения.обновитьВА", в, к, с, диапазон); /**/console.debug("ИГР Изображения.обновитьВА", в, кадр, с, диапазон);
this.адр = кадр;
this._диапазон = диапазон;
let ширинаДиапазона = Math.abs(д2 - д0);
let высотаДиапазона = Math.abs(д3 - д1);
let ширинаКадра = Math.abs(к0);
let высотаКадра = Math.abs(к1);
let кадровX = Math.floor(ширинаДиапазона / ширинаКадра);
let кадровY = Math.floor(высотаДиапазона / высотаКадра);
this.адрыX = кадровX > кадровY;
this.адров = this.адрыX ? кадровX : кадровY;
this.анимация = setInterval(() => { this._анимировать(эл); }, с);
} }
} }
@@ -191,6 +207,19 @@ function Изображения(события, виды, анимации, ко
} }
}; };
this._анимировать = function(эл)
{
this.омер += 1;
if (this.омер >= this.адров)
{
this.омер = 0;
}
let x = this.адрыX ? this.омер * this.адр[0] : 0;
let y = this.адрыX ? 0 : this.омер * this.адр[1];
/**/console.log("ИГР Изображения._анимировать x/y", x, y);
эл.style.backgroundPosition = `${x}px ${y}px`;
};
// Конструктор. // Конструктор.
this.создать(); this.создать();
} }