сломано. ввести разбор диапазонов
This commit is contained in:
@@ -1,62 +1,5 @@
|
||||
function Анимация(элемент, параметры)
|
||||
{
|
||||
this.запустить = function()
|
||||
{
|
||||
this.идёт = false;
|
||||
|
||||
let п = параметры;
|
||||
let воспроизведений = Number(п["воспроизведений"]);
|
||||
let скорость = Number(п["скорость"]);
|
||||
let к0 = Number(п["кадр.0"]);
|
||||
let к1 = Number(п["кадр.1"]);
|
||||
let д0 = Number(п["диапазон.0"]);
|
||||
let д1 = Number(п["диапазон.1"]);
|
||||
let д2 = Number(п["диапазон.2"]);
|
||||
let д3 = Number(п["диапазон.3"]);
|
||||
|
||||
if (
|
||||
воспроизведений == null ||
|
||||
скорость == null ||
|
||||
к0 == null ||
|
||||
к1 == null ||
|
||||
д0 == null ||
|
||||
д1 == null ||
|
||||
д2 == null ||
|
||||
д3 == null
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ширинаДиапазона = Math.abs(д2 - д0);
|
||||
let высотаДиапазона = Math.abs(д3 - д1);
|
||||
let ширинаКадра = Math.abs(к0);
|
||||
let высотаКадра = Math.abs(к1);
|
||||
let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра);
|
||||
let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра);
|
||||
|
||||
this.скорость = скорость;
|
||||
this.номерВоспроизведения = 0;
|
||||
this.колвоВоспроизведений = воспроизведений;
|
||||
this.размерКадра = [к0, к1];
|
||||
this.поГоризонтали = кадровПоГоризонтали > кадровПоВертикали;
|
||||
this.номерКадра = -1;
|
||||
this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали;
|
||||
this.началоДиапазона = [д0, д1];
|
||||
this.номерИтерации = null;
|
||||
this.идёт = true;
|
||||
};
|
||||
|
||||
this.обновить = function(время)
|
||||
{
|
||||
let итерация = Math.floor(время / this.скорость);
|
||||
if (this.номерИтерации == итерация)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.анимировать();
|
||||
this.номерИтерации = итерация;
|
||||
};
|
||||
|
||||
this.анимировать = function()
|
||||
{
|
||||
this.номерКадра += 1;
|
||||
@@ -80,6 +23,112 @@ function Анимация(элемент, параметры)
|
||||
элемент.style.backgroundPosition = `${x}px -${y}px`;
|
||||
};
|
||||
|
||||
this.запустить = function()
|
||||
{
|
||||
this.идёт = false;
|
||||
|
||||
let п = параметры;
|
||||
let воспроизведений = Number(п["воспроизведений"]);
|
||||
let скорость = Number(п["скорость"]);
|
||||
let к0 = Number(п["кадр.0"]);
|
||||
let к1 = Number(п["кадр.1"]);
|
||||
let диапазоны = this.разобратьДиапазоны();
|
||||
|
||||
if (
|
||||
воспроизведений == null ||
|
||||
скорость == null ||
|
||||
к0 == null ||
|
||||
к1 == null ||
|
||||
диапазоны == null
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ширинаДиапазона = Math.abs(д2 - д0);
|
||||
let высотаДиапазона = Math.abs(д3 - д1);
|
||||
let ширинаКадра = Math.abs(к0);
|
||||
let высотаКадра = Math.abs(к1);
|
||||
let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра);
|
||||
let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра);
|
||||
|
||||
this.диапазоны = диапазоны;
|
||||
this.скорость = скорость;
|
||||
this.номерВоспроизведения = 0;
|
||||
this.колвоВоспроизведений = воспроизведений;
|
||||
this.размерКадра = [к0, к1];
|
||||
this.поГоризонтали = кадровПоГоризонтали > кадровПоВертикали;
|
||||
this.номерКадра = -1;
|
||||
this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали;
|
||||
this.началоДиапазона = [д0, д1];
|
||||
this.номерИтерации = null;
|
||||
this.идёт = true;
|
||||
};
|
||||
|
||||
this.обновить = function(время)
|
||||
{
|
||||
let итерация = Math.floor(время / this.скорость);
|
||||
if (this.номерИтерации == итерация)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.анимировать();
|
||||
this.номерИтерации = итерация;
|
||||
};
|
||||
|
||||
this.разобратьДиапазон = function(номер)
|
||||
{
|
||||
var список = [];
|
||||
for (var н = 0; н < 4; ++н)
|
||||
{
|
||||
let ключ = `диапазон.${номер}.${н}`;
|
||||
let значение = Number(параметры[ключ]);
|
||||
if (значение)
|
||||
{
|
||||
список.push(значение);
|
||||
}
|
||||
}
|
||||
if (список.length == 4)
|
||||
{
|
||||
return список;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
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.запустить();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user