Почему непрозрачность изображений в этом слайд-шоу не меняется? (CSS, Javascipt)

#javascript #html #css #slideshow

Вопрос:

Я пытаюсь создать карусель изображений. Однако я сталкиваюсь с неожиданным поведением с анимацией/переходом непрозрачности.

У меня есть .active класс, который успешно переходит между этими тремя img . Этот .active класс добавляет opacity: 1; . Однако, когда последний img загружается в DOM, он сохраняет свой начальный opacity: 0; , и даже если .active класс добавляется к каждому img каждые шесть секунд, opacity он не меняется.

Я предполагаю, что это может быть проблемой CSS, но я ценю помощь!

Язык JavaScript

     const autoSlideshow = () => {
        const slides = document.querySelectorAll('.slides img')
        const slideDelay = 6000
        let currentSlide = 0
    
        slides[currentSlide].classList.add('.active')
    
        const nextSlide = () => {
            slides[currentSlide].classList.remove('.active')
            currentSlide = (currentSlide   1) % slides.length
            slides[currentSlide].classList.add('.active')
        }
    
        setInterval(nextSlide, slideDelay)
    }
    autoSlideshow()
 

CSS

 .slides img.active {
    opacity: 1;
    transition: opacity 2s ease-in-out;
}
.slides img {
    position: inherit;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0;
}
 

HTML

 <div class="slides">
   <img src="img/ac62.jpg" alt="couple 1"> 
   <img src="img/b348.jpg" alt="couple 2">
   <img src="img/bk40.jpg" alt="couple 3">
</div>
 

Ответ №1:

Решение

 const autoSlideshow = () => {
    const slides = document.querySelectorAll('.slides img')
    const slideDelay = 6000
    let currentSlide = 0

    slides[currentSlide].classList.add('active')

    const nextSlide = () => {
        slides[currentSlide].classList.remove('active')
        currentSlide = (currentSlide   1) % slides.length
        slides[currentSlide].classList.add('active')
    }

    setInterval(nextSlide, slideDelay)
}
autoSlideshow()
 

заменить .active на active

Ответ №2:

Вам нужно удалить . из .active при добавлении в список классов или удалении из него. Поскольку вы уже выполняете classList.add / classList.remove , нет необходимости определять класс с .

 const autoSlideshow = () => {
        const slides = document.querySelectorAll('.slides img')
        const slideDelay = 6000
        let currentSlide = 0
    
        slides[currentSlide].classList.add('active')
    
        const nextSlide = () => {
            slides[currentSlide].classList.remove('active')
            currentSlide = (currentSlide   1) % slides.length
            slides[currentSlide].classList.add('active')
        }
    
        setInterval(nextSlide, slideDelay)
    }
    autoSlideshow() 
 .slides img.active {
    opacity: 1;
    transition: opacity 2s ease-in-out;
}
.slides img {
    position: inherit;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0;
} 
 <div class="slides">
   <img src="https://source.unsplash.com/random" alt="couple 1"> 
   <img src="https://source.unsplash.com/random" alt="couple 2">
   <img src="https://source.unsplash.com/random" alt="couple 3">
</div>