๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript Effect

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šฌ๋ผ์ด๋“œ ํšจ๊ณผ : transition

by ์ฝ”ํŒŒ์นด 2022. 8. 29.
728x90

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ : ์Šฌ๋ผ์ด๋“œ ํšจ๊ณผ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋“ค ์ค‘, CSS์˜ ํŠธ๋žœ์ง€์…˜ ์†์„ฑ์„ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ ํšจ๊ณผ์ž…๋‹ˆ๋‹ค.


HTML ์†Œ์Šค

HTML๋กœ ๋ผˆ๋Œ€๋ฅผ ๋จผ์ € ์žก์•„์ค๋‹ˆ๋‹ค. section ํƒœ๊ทธ ์•ˆ์—๋Š” ํด๋ž˜์Šค๋ช…์ด slider__wrap์ธ div ๋ฐ•์Šค, ๊ทธ ์•ˆ์—๋Š” ํด๋ž˜์Šค๋ช…์ด slider__img์ธ div ๋ฐ•์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ , slider__img ๋ฐ•์Šค ์•ˆ์—๋Š” ์ด๋ฏธ์ง€ 5์žฅ์„ ์‚ฝ์ž…ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

<section id="sliderType01">
    <div class="slider__wrap">
        <div class="slider__img">
            <div class="slider">
                <img src="../assets/img/effect_bg11-min.jpg" alt="์ด๋ฏธ์ง€1">
            </div>
            <div class="slider">
                <img src="../assets/img/effect_bg12-min.jpg" alt="์ด๋ฏธ์ง€2">
            </div>
            <div class="slider">
                <img src="../assets/img/effect_bg13-min.jpg" alt="์ด๋ฏธ์ง€3">
            </div>
            <div class="slider">
                <img src="../assets/img/effect_bg14-min.jpg" alt="์ด๋ฏธ์ง€4">
            </div>
            <div class="slider">
                <img src="../assets/img/effect_bg15-min.jpg" alt="์ด๋ฏธ์ง€5">
            </div>
        </div>
    </div>
</section>

CSS ์†Œ์Šค

๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ด๊ธด slider ํด๋ž˜์Šค์—๋Š” absolute์™€ z-index ์†์„ฑ์„ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€๋ฅผ ์ธต์ธต์ด ์Œ“์•„, ํ•œ ์žฅ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ๋” ์ž‘์—…ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

/* slider */
.slider__wrap {
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}
.slider__img {
    position: relative;
    width: 800px;
    height: 520px;
}
.slider {
    position: absolute;
    left: 0;
    top: 0;
}
.slider::before{
    position: absolute;
    left: 5px;
    top: 5px;
    background: rgba(0,0,0,0.4);
    color: #fff;
    padding: 5px 10px;
}
.slider:nth-child(1)::before {content: '์ด๋ฏธ์ง€1';}
.slider:nth-child(2)::before {content: '์ด๋ฏธ์ง€2';}
.slider:nth-child(3)::before {content: '์ด๋ฏธ์ง€3';}
.slider:nth-child(4)::before {content: '์ด๋ฏธ์ง€4';}
.slider:nth-child(5)::before {content: '์ด๋ฏธ์ง€5';}
.slider:nth-child(1) {z-index: 5;}
.slider:nth-child(2) {z-index: 4;}
.slider:nth-child(3) {z-index: 3;}
.slider:nth-child(4) {z-index: 2;}
.slider:nth-child(5) {z-index: 1;}
@media (max-width: 800px){
    .slider__img {
        width: 400px;
        height: 260px;
    }
}

JAVASCRIPT ์†Œ์Šค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ๋Š” ๋จผ์ € ์„ ํƒ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ currentIndex๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , setInterval ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 3์ดˆ๋งˆ๋‹ค ๋ณ€์ˆ˜์˜ ๊ฐ’์ด 1์”ฉ ์ปค์ง€๋˜, ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ๋ณธ๊ฐ’(0)์—์„œ ๋‹ค์‹œ ๊ฐ’์ด ์ฆ๊ฐ€๋˜๋„๋ก ์ž‘์—…ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img");
const slider = sliderWrap.querySelectorAll(".slider");

let currentIndex = 0;  // ํ˜„์žฌ ๋ณด์ด๋Š” ์ด๋ฏธ์ง€
let sliderCount = slider.length;  // ์ด ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜

// 1000 : 1์ดˆ, 1์ดˆ์— ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ
setInterval(() => {
    let nextIndex = (currentIndex + 1) % sliderCount;  // ๋‹ค์Œ ์ด๋ฏธ์ง€
    // sliderCount์˜ ๊ฐ’์ด 5์ด๋ฏ€๋กœ, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0...

    // slider[0].style.opacity = "0";  // ์ฒซ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    // slider[1].style.opacity = "1";  // ๋‘๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    // slider[1].style.opacity = "0";  // ๋‘๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    // slider[2].style.opacity = "1";  // ์„ธ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    // slider[2].style.opacity = "0";  // ์„ธ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    // slider[3].style.opacity = "1";  // ๋„ค๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    // slider[3].style.opacity = "0";  // ๋„ค๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    // slider[4].style.opacity = "1";  // ๋‹ค์„ฏ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    // slider[4].style.opacity = "0";  // ๋‹ค์„ฏ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    // slider[0].style.opacity = "1";  // ์ฒซ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    slider[currentIndex].style.opacity = "0";  // ํ˜„์žฌ ์ด๋ฏธ์ง€ ๊ฐ€๋ฆฌ๊ธฐ
    slider[nextIndex].style.opacity = "1";  // ๋‹ค์Œ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

    currentIndex = nextIndex;
},3000)

๊ฒฐ๊ณผ

728x90

๋Œ“๊ธ€

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฆ™

CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘