You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.8KB

  1. function Анимация(элемент, параметры)
  2. {
  3. this.запустить = function()
  4. {
  5. let п = параметры;
  6. let воспроизведений = Number(п["воспроизведений"]);
  7. let скорость = Number(п["скорость"]);
  8. let к0 = Number(п["кадр.0"]);
  9. let к1 = Number(п["кадр.1"]);
  10. let д0 = Number(п["диапазон.0"]);
  11. let д1 = Number(п["диапазон.1"]);
  12. let д2 = Number(п["диапазон.2"]);
  13. let д3 = Number(п["диапазон.3"]);
  14. if (
  15. воспроизведений == null ||
  16. скорость == null ||
  17. к0 == null ||
  18. к1 == null ||
  19. д0 == null ||
  20. д1 == null ||
  21. д2 == null ||
  22. д3 == null
  23. ) {
  24. return;
  25. }
  26. let ширинаДиапазона = Math.abs(д2 - д0);
  27. let высотаДиапазона = Math.abs(д3 - д1);
  28. let ширинаКадра = Math.abs(к0);
  29. let высотаКадра = Math.abs(к1);
  30. let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра);
  31. let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра);
  32. this.номерКадра = 0;
  33. this.размерКадра = [к0, к1];
  34. this.поГоризонтаи = кадровПоГоризонтали > кадровПоВертикали;
  35. this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали;
  36. // Возможно, в будущем стоит заменить частные таймеры на один общий.
  37. // Вдруг в браузерах есть ограничение на количество таймеров от одной страницы.
  38. this.таймер = setInterval(() => { this.анимировать(); }, скорость);
  39. };
  40. this.остановить = function()
  41. {
  42. if (this.таймер)
  43. {
  44. clearInterval(this.таймер);
  45. }
  46. };
  47. this.анимировать = function()
  48. {
  49. this.номерКадра += 1;
  50. if (this.номерКадра >= this.колвоКадров)
  51. {
  52. this.номерКадра = 0;
  53. }
  54. let x = this.поГоризонтали ? this.номерКадра * this.размерКадра[0] : 0;
  55. let y = this.поГоризонтали ? 0 : this.номерКадра * this.размерКадра[1];
  56. элемент.style.backgroundPosition = `${x}px ${y}px`;
  57. };
  58. // Конструктор.
  59. this.запустить();
  60. }