javascript 如何动画幻灯片HTML CSS JS

vuktfyat  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(104)

我用HTML、CSS和JS为我的页面创建了一个幻灯片。
代码如下:

  • index.html
<div class="slideshow">
                <div class="image__container">
                    <img src="/static/images/indoor2.jpg" alt="Indoor">        
                </div>
                <div class="image__container">
                    <img src="/static/images/indoor3.jpg" alt="Indoor">        
                </div>
                <div class="image__container">
                    <img src="/static/images/indoor4.jpg" alt="Indoor">        
                </div>
            </div>

字符串

  • style.css
.slideshow {
    position: relative;
    animation: fadeInFromLeft 1.5s ease;
}

.image__container img {
    height: 80vh;
    width: 100%;
    border-radius: 10px;
    box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2);
}

  • script.js
let slideIndex = 0;
showSlides();

function showSlides() {
    const slides = document.getElementsByClassName('image__container');

    // Hide all images
    for (let i = 0; i < slides.length; i++) {
        slides[i].style.display = 'none';
    }

    // Show curr image
    slideIndex++;
    if (slideIndex > slides.length) {
        slideIndex = 1;
    }
    slides[slideIndex - 1].style.display = 'block';

    // Repeat after 2 sec (2000ms)
    setTimeout(showSlides, 3000);
}


幻灯片效果很好,但我想添加一些过渡,例如淡入。
我试着这样做:

  • style.css
.slideshow {
    position: relative;
    animation: fadeInFromLeft 1.5s ease;
}

.image__container img {
    animation: fadeInSlideshow 1s ease-in-out;
    height: 80vh;
    width: 100%;
    border-radius: 10px;
    box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2);
}

@keyframes fadeInSlideshow {
    from {
        opacity: 0.5;
    }
    to {
        opacity: 1;
    }
}


但是,即使它起作用,图像之间的过渡也不完全是最好的。
在动画和过渡领域还不是很实用,我想知道是否有人可以给予我一些关于如何进行的建议,以便了解如何在未来处理这个“问题”。
我很感激任何能帮助我的回应。
先谢谢你。

qc6wkl3g

qc6wkl3g1#

let slideIndex = 0;
showSlides();

function showSlides() {
    const slides = document.getElementsByClassName('image__container');

    // Hide all images
    for (let i = 0; i < slides.length; i++) {
        slides[i].classList.remove('active');
    }

    // Show current image
    slideIndex++;
    if (slideIndex > slides.length) {
        slideIndex = 1;
    }
    slides[slideIndex - 1].classList.add('active');

    // Repeat after 3 sec (3000ms)
    setTimeout(showSlides, 3000);
}
.slideshow {
    position: relative;
    animation: fadeInFromLeft 1.5s ease;
}

.image__container {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    border-radius: 10px;
    box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2);
    transition: opacity 1s ease-in-out;
}

/* Add a class to the visible image container */
.image__container.active {
    opacity: 1;
}
<div class="slideshow">
                <div class="image__container">
                    <img src="https://avatars.githubusercontent.com/u/12371363?v=4" alt="Indoor">        
                </div>
                <div class="image__container">
                    <img src="https://avatars.githubusercontent.com/u/1493671?v=4" alt="Indoor">        
                </div>
                <div class="image__container">
                    <img src=https://avatars.githubusercontent.com/u/11975561?v=4" alt="Indoor">        
                </div>
            </div>

我还做了一些修改,在同一位置显示所有图像。希望这是你的意图。
请试试这个,如果它工作。请在HTML中使用正确的图像URL。我正在使用互联网资源。

相关问题