|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- function Анимация(элемент, параметры)
- {
- this.анимировать = function()
- {
- this.номерКадра += 1;
- if (this.номерКадра >= this.колвоКадров)
- {
- this.номерВоспроизведения += 1;
- this.номерКадра = 0;
- if (
- this.воспроизведений > 0 &&
- this.номерВоспроизведения >= this.воспроизведений
- ) {
- this.идёт = false;
- return;
- }
- }
-
- let x0 = this.началоДиапазона[0];
- let y0 = this.началоДиапазона[1];
- let x = this.поГоризонтали ? x0 + this.номерКадра * this.кадр[0] : x0;
- let y = this.поГоризонтали ? y0 : y0 + this.номерКадра * this.кадр[1];
- элемент.style.backgroundPosition = `${x}px -${y}px`;
- };
-
- this.запустить = function()
- {
- this.идёт = false;
- if (!this.разобратьПараметры())
- {
- return;
- }
-
- let ширинаДиапазона = Math.abs(this.диапазоны[0][2] - this.диапазоны[0][0]);
- let высотаДиапазона = Math.abs(this.диапазоны[0][3] - this.диапазоны[0][1]);
- let ширинаКадра = this.кадр[0];
- let высотаКадра = this.кадр[1];
- let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра);
- let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра);
-
- this.номерВоспроизведения = 0;
- this.поГоризонтали = кадровПоГоризонтали > кадровПоВертикали;
- this.номерКадра = -1;
- this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали;
- this.началоДиапазона = [this.диапазоны[0][0], this.диапазоны[0][1]];
- this.номерИтерации = null;
- this.идёт = true;
- };
-
- this.обновить = function(время)
- {
- let итерация = Math.floor(время / this.скорость);
- if (this.номерИтерации == итерация)
- {
- return;
- }
- this.анимировать();
- this.номерИтерации = итерация;
- };
-
- this.разобратьДиапазоны = function()
- {
- let ключи = Object.keys(параметры).sort();
- let префикс = "диапазоны";
- var значения = [];
- for (var номер in ключи)
- {
- let ключ = ключи[номер];
- if (ключ.startsWith(префикс))
- {
- let значение = Number(параметры[ключ]);
- if (!isNaN(значение))
- {
- значения.push(значение);
- }
- }
- }
- if (значения.length % 4 == 0)
- {
- var диапазоны = [];
- let колво = значения.length / 4;
- for (var д = 0; д < колво; ++д)
- {
- var диапазон = [];
- for (var н = 0; н < 4; ++н)
- {
- диапазон.push(значения[д * 4 + н]);
- }
- диапазоны.push(диапазон);
- }
- return диапазоны;
- }
- return null;
- };
-
- this.разобратьПараметры = function()
- {
- let п = параметры;
- let воспроизведений = Number(п["воспроизведений"]);
- let скорость = Number(п["скорость"]);
- let к0 = Number(п["кадр.0"]);
- let к1 = Number(п["кадр.1"]);
- let диапазоны = this.разобратьДиапазоны();
-
- if (
- воспроизведений == null ||
- скорость == null ||
- к0 == null ||
- к1 == null ||
- диапазоны == null
- ) {
- return false;
- }
-
- this.диапазоны = диапазоны;
- this.воспроизведений = воспроизведений;
- this.кадр = [к0, к1];
- this.скорость = скорость;
-
- return true;
- };
-
- // Конструктор.
- this.запустить();
- }
|