Ротатор изображений Javascript иногда мерцает

Я создал ротатор изображений JS / CSS, который вращает 5 разных изображений в разделе моего веб-сайта с эффектом постепенного появления / исчезновения в CSS.

На настольном компьютере / ноутбуке изображения вращаются идеально плавно, хотя примерно один раз в каждом цикле изображения мерцают и быстро переходят к следующему. Какова причина этого?

Источник:-

CSS

@keyframes fadeinout {
0%, 100% { opacity: 0; }
50%   { opacity: 1; }
}

#rotator {
  animation: fadeinout 3s;
}

JS

function clientRotator(){

  var section = document.getElementById("clients");
  var clientImg = document.createElement("img");
  clientImg.setAttribute("id", "rotator");
  section.appendChild(clientImg);
  clientImg.src = "assets/exxon-mobil.png";
  var imgArray = ["assets/shell.png", "assets/bp.png", "assets/talisman.png", "assets/cnr-international.png", "assets/exxon-mobil.png"];

  var delaySeconds = 3;
  var iteration = 0;

  setInterval(function(){

    section.removeChild(clientImg);
    clientImg = document.createElement("img");
    clientImg.setAttribute("id", "rotator");
    section.appendChild(clientImg);
    clientImg.src = imgArray[iteration];
    clientImg.setAttribute("alt", "Oil & Gas - Gas Turbine Overhauls");

    if (iteration < imgArray.length-1){
      iteration += 1;
    }
    else {
      iteration = 0;
    }
  }, delaySeconds * 1000)

}

Возможно, таймер setInterval и таймер CSS теряют синхронизацию. Другой вопрос: зачем вы воссоздаете элемент изображения в каждом интервале? В этом нет смысла.

Randy Casburn 04.04.2018 17:03

Вам следует подумать об использовании requestAnimationFrame вместо setInterval: developer.mozilla.org/en-US/docs/Web/API/window/…

Cristian Traìna 04.04.2018 17:20

@RandyCasburn Я действительно думал, что это возможно, но анимация CSS запускается только тогда, когда JS создает элемент, поэтому этого не должно быть. Единственная причина, по которой я его воссоздаю, - заставить CSS работать плавно, поскольку он не работает с простым изменением источника изображения. Думаю, я мог бы сделать затухание в jQuery.

s89_ 04.04.2018 18:14

Вот почему вам следует подумать о добавлении / удалении имен классов, а не полагаться на идентификатор. Это изменение, вероятно, решит вашу проблему, потому что вы не будете воссоздавать узел.

Randy Casburn 04.04.2018 18:16

Взгляните на это решение, которое вообще использует НЕТ JavaScript. (это не моя работа): codepen.io/Ahrengot/pen/bKdLC

Randy Casburn 04.04.2018 18:18

@RandyCasburn ах, я не подумал попробовать добавить / удалить имена классов - спасибо. Другая проблема, с которой я столкнулся, была на некоторых старых телефонах, мой ротатор очень глючный, но он отлично работает, когда я отключил анимацию затухания после того, как прочитал, что некоторые старые платформы телефонов плохо обрабатывают CSS3, но я дам имя класса и нет -JS попробуй и посмотри, что получится.

s89_ 04.04.2018 18:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мерцание вызвано небольшой рассинхронизацией js и css, вы можете вызвать мерцание (для тестирования), уменьшив анимацию css с 3 до 2 с.

Чтобы исправить это, просто добавьте в #rotator свойство opacity: 0;.

Другие вопросы по теме