Проблема была именно в том, что задержки от setTimeout в Mozilla не было.
Задержка передавалась в виде аргумента-переменной, в которую записывалось значение transition из CSS.
setTimeout(function() {
slides[slidesNumber - 1].style.opacity = '0';
},animateDuration + 50);
Чтобы получить значение animateDuration было сделано следующее:
var slides = document.getElementsByClassName('slide'); // находим сам слайд
var computedSlides = getComputedStyle(slides[0]); // получаем css элемента
var slidesTransition = computedSlides.transition; // получаем все значения transition
var arrayStyleSlides = slidesTransition.split(' '); // разбиваем строку на отдельные "слова"
var animateDuration = parseFloat(arrayStyleSlides[1]) * 1000; // вытаскиваем второе "слово" - значение длительности анимирования
Как оказалось, строка:
var slidesTransition = computedSlides.transition;
Возвращала строку со всеми значениями составного свойства transition в виде:
all 2s ease
Но это работает только в Chrome, в Mozilla почему-то возвращалась просто пустая строка (видимо, все значения составного свойства в Mozilla не получить, а может быть здесь только с этим свойством такое поведение).
В итоге, для получения значения длительности transition строку:
var slidesTransition = computedSlides.transition;
Заменил на:
var slidesTransition = computedSlides.transitionDuration;
Ну, и соответственно, следующая инструкция уже не нужна:
var arrayStyleSlides = slidesTransition.split(' ');
И здесь пара изменений:
var animateDuration = parseFloat(slidesTransition) * 1000;