Продолжительность анимации Javascript менялась между компьютерами

#javascript #animation #spfx

Вопрос:

У меня есть веб-часть SPFx с анимацией, созданной на JavaScript, где я создаю слайдер для запуска изображений слева направо, созданный с помощью JS, так как я динамически получаю изображения и продолжительность и вычисляю их на ходу.

Все идет отлично, но проблема в том, что скорость анимации не одинакова для всех компьютеров, некоторые делают ее быстрее, некоторые медленнее, а некоторые дают разные результаты с помощью F5 или CTRL F5

Если это уместно, у нас здесь 182 изображения, на которых запущено

мой код CSS

  .gallerySlider{
      width: 100%;
      overflow: hidden;
      display: flex;
      column-gap: 30px;
      position: absolute;
      top: 0;
      transition: left linear;

      transform: translateZ(0);
      will-change: transform;
      

      img {
        height: 100%;
      }
 

язык JavaScript

   let imgz = document.querySelectorAll(`.${styles.autoGallery} img`);
  let g = document.querySelector(`.${styles.gallerySlider}`) as HTMLElement;
  let totalWidth = imgz.length * 30
  imgz.forEach(im => totalWidth  = (im as HTMLElement).offsetWidth)
  g.style.width = totalWidth   "px"



  let gAnim = ()=>{

    let base = (g.parentElement.offsetWidth   200)*-1
    let delta = g.parentElement.offsetWidth   200   g.offsetWidth   200

    let animVals = [
      //{ left: ( g.parentElement.offsetWidth   200 )   'px', },
      //{ left: "-"  ( g.offsetWidth   200 )   'px',}
      
      { transform: `translateX( -${g.parentElement.offsetWidth   200}px )` }, // 0%
      { transform: `translateX( ${base   (delta*0.2)}px )` }, // 20%
      { transform: `translateX( ${base   (delta*0.4)}px )` }, // 40%
      { transform: `translateX( ${base   (delta*0.6)}px )` }, // 60%
      { transform: `translateX( ${base   (delta*0.8)}px )` }, // 80%
      { transform: `translateX( ${g.offsetWidth   200}px )` }  // 100%
    ]
    let animCong = {
      duration:this.properties.animTime*1000,
      iterations: Infinity,
      delay:this.properties.interval*1000,
      easing:"linear"
    }
    this.animation = g.animate(animVals, animCong );
    console.log("gAnim", animVals, animCong);
    window['cancelGAnim'] = ()=>{ this.animation.cancel() }
  };

  if (this.animation) {
    if (this.modalOpen == false) {
      console.log("play from startAutomation, this.modalOpen", this.modalOpen);
      this.animation.play();
    }
  } else {
    console.log("AutoGalleryWebPart  gAnim");
    //setTimeout(()=>gAnim(),1000)
    gAnim()
  }