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; 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.запустить(); }