getAttribute() / switch() / :focus / forEach()
carousel ꡬν μλ£ β
- κ·Έμ κ» μ¬μ νμ΅ κ°μ΄λμ κΆκ³ μ¬νμ λ€λ¦κ² λ°κ²¬νκ³ λμ μ§μ§ μ μΌ μ²μμ μμ±νλ κ² μ€μ μ΄λ° κ² μμλλ° λΉμμ μ€νμ΄ μ ν μ λμ
<div class="carousel-image-box"> <img src="/images/image-1.png" class="carousel-image"> </div> <button type="button" class="carousel-arrow right"> <i class="fas fa-arrow-circle-right"></i> </button>
const rightArrow = document.querySelector('.right'); rightArrow.addEventListener('click', function goNext () { var presentImage = document.querySelector('.carousel-image'); if (presentImage.src === '/images/image-1.png') { presentImage.src = '/images/image-2.png'; } else if (presentImage.src === '/images/image-2.png') { presentImage.src = '/images/image-3.png'; } else if (presentImage.src === '/images/image-3.png') { presentImage.src = '/images/image-4.png'; } else if (presentImage.src === '/images/image-4.png') { presentImage.src = '/images/image-5.png'; } else { presentImage.src = '/images/image-1.png'; } });
- κ·Όλ° μ€λ onclickμ κ²μνλ€κ° μ΄ κΈμ λ°κ²¬ν¨
- μ¬κΈ°μ 'ν΄λ¦ν λλ§λ€ κ° λ³κ²½' λΆλΆμ μ½λκ° λ΄κ° μμμ μ΄ κ±°λ κ°μ λ§₯λ½μΈ λ―νλ° μ΄κ±΄ μ€νμ΄ μ λκΈΈλ μ¬κΈ° μ½λμ ν μ€νΈ κ°μ μ΄λ―Έμ§ srcλ‘ λ°κΏμ ν μ€νΈ ν΄λ΄€μ
- κ·Έλλ‘ codepenμμ ν΄μ μΈλΆ μ΄λ―Έμ§ λ§ν¬λ₯Ό μ¬μ©ν¨
<img src="https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg" class="carousel-image"> <button type="button" onclick="goNext()">λ²νΌ</button>
function goNext () { var presentImage = document.querySelector('.carousel-image'); if (presentImage.src === 'https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg') { presentImage.src = 'https://cdn.pixabay.com/photo/2014/09/03/20/15/shoes-434918_960_720.jpg'; } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/09/03/20/15/shoes-434918_960_720.jpg') { presentImage.src = 'https://cdn.pixabay.com/photo/2014/05/21/14/54/feet-349687_960_720.jpg'; } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/05/21/14/54/feet-349687_960_720.jpg') { presentImage.src = 'https://cdn.pixabay.com/photo/2014/07/10/10/19/steps-388914_960_720.jpg'; } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/07/10/10/19/steps-388914_960_720.jpg') { presentImage.src = 'https://cdn.pixabay.com/photo/2015/03/11/21/50/shutters-669296_960_720.jpg'; } else { presentImage.src = 'https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg'; } }
- κ²°κ³Όλ μμ μλ¨......(μ¬μ€ μ΄κ²λ μ²μμ μλμ. κ°λ°μ λꡬμ issues νμ μ€λ₯κ° λ¨λ©΄μ μλμ΄ μ λκΈΈλ μμ μ λλ κ±΄κ° νλλ° κ²μν΄μ Back-forward cache κ΅¬κΈ μ€μ μ λ°κΏμ£ΌλκΉ λλ€)
- μλ λ λ€ λκ°μ΄ μ΄λ―Έμ§κ³ λκ°μ΄ λ²νΌμ΄κ³ src λΆλΆ νλλ§ λ€λ₯Έλ° λ΄ κ±΄ μ μ λλ κ±ΈκΉ. srcμ κ°μ΄ μΉ μλ² μ£Όμλ μλλμ μ°¨μ΄μΈλ°.
- console.log(presentImage.src)λ₯Ό μ€νμν€λ©΄ http: //127.0.0.1:5500/images/image-1.png λΌκ³ λ¬λ€. μ¦, srcμ κ°μ΄ κ·Έλ₯ /images/image-1.pngκ° μλλΌλ λ».
- μ΄κ±Έλ‘ λ°κΏ μ¨μ£ΌλκΉ carouselμ΄ μλμ νκΈ΄ νλλ° μ΄λ κ² μ°λ©΄ λ΄ μ»΄ν¨ν°μμλ§ λ³Ό μ μμ΄μ μλ―Έκ° μλ€
function goNext () { var presentImage = document.querySelector('.carousel-image'); if (presentImage.src === 'http://127.0.0.1:5500/images/image-1.png') { presentImage.src = 'http://127.0.0.1:5500/images/image-2.png'; } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-2.png') { presentImage.src = 'http://127.0.0.1:5500/images/image-3.png'; } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-3.png') { presentImage.src = 'http://127.0.0.1:5500/images/image-4.png'; } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-4.png') { presentImage.src = 'http://127.0.0.1:5500/images/image-5.png'; } else { presentImage.src = 'http://127.0.0.1:5500/images/image-1.png'; } }
- ν΄λ΅μ ν€μλλ
getAttribute()
μλ€ βββ x 10000<!-- HTML μ½λ μμ --> <div class="carousel-image-box"> <img src="/images/image-1.png" class="carousel-image"> </div> <button type="button" class="carousel-arrow right"> <i class="fas fa-arrow-circle-right"></i> </button>
// μ°μΈ‘ λ²νΌ ν΄λ¦ μ π‘ λ€μ μ΄λ―Έμ§ 보μ¬μ£ΌκΈ° const rightArrow = document.querySelector('.right'); rightArrow.addEventListener('click', function goNext () { var presentImage = document.querySelector('.carousel-image'); if (presentImage.getAttribute('src') === '/images/image-1.png') { presentImage.src = '/images/image-2.png'; } else if (presentImage.getAttribute('src') === '/images/image-2.png') { presentImage.src = '/images/image-3.png'; } else if (presentImage.getAttribute('src') === '/images/image-3.png') { presentImage.src = '/images/image-4.png'; } else if (presentImage.getAttribute('src') === '/images/image-4.png') { presentImage.src = '/images/image-5.png'; } else { presentImage.src = '/images/image-1.png'; } }); // μ’μΈ‘ λ²νΌ ν΄λ¦ μ π‘ μ΄μ μ΄λ―Έμ§ 보μ¬μ£ΌκΈ° const leftArrow = document.querySelector('.left'); leftArrow.addEventListener('click', function goBack () { var presentImage = document.querySelector('.carousel-image'); if (presentImage.getAttribute('src') === '/images/image-1.png') { presentImage.src = '/images/image-5.png'; } else if (presentImage.getAttribute('src') === '/images/image-2.png') { presentImage.src = '/images/image-1.png'; } else if (presentImage.getAttribute('src') === '/images/image-3.png') { presentImage.src = '/images/image-2.png'; } else if (presentImage.getAttribute('src') === '/images/image-4.png') { presentImage.src = '/images/image-3.png'; } else { presentImage.src = '/images/image-4.png'; } });
π₯ μμ±( attribute ) μ°Έκ³
- getAttribute('κ·Έ κ°μ μ»κ³ μΆμ μμ± μ΄λ¦')
- setAttiribute('μΆκ°νκ³ μΆμ μμ± μ΄λ¦', 'κ·Έ κ°')
- hasAttribute('μ‘΄μ¬ μ¬λΆλ₯Ό μκ³ μΆμ μμ± μ΄λ¦')
- removeAttribute('μ κ±°νκ³ μΆμ μμ± μ΄λ¦')
- κ²°κ΅ μ΄λ°μ μμ±νλ μ½λμμ
src
λ₯ΌgetAttribute('src')
λ‘λ§ λ°κΎΈλ©΄ λλ κ±°μλ€......- μ 건 μ΄λ ΅μ§λ μκ³ , λ¨μν κΈ°λ³Έ if 쑰건문μ λ΄κ° μ΄ν΄λ νκ³ μλ ꡬ문μΈλ° λ©μ²ν λλ μ κΏμ κ³³λ§ λ체 λͺ λ°ν΄λ₯Ό λ κ±ΈκΉ.
- μΌλ¨μ ꡬνμ΄ λλ κ² μλλ μΈλ°μλ μ¬λ΄μ νΌμ μμ΄κ³ , λ€μ λ¨κ³λ‘ λμ΄κ°
- λ¨μ μꡬ μ¬νμ
μ΄λ―Έμ§ νλ¨μ Dotλ₯Ό λλ₯Ό κ²½μ°, ν΄λΉ μλ²μ μ΄λ―Έμ§ 보μ¬μ£ΌκΈ°
<!-- HTML μμ --> <div class="carousel-dots"> <button class="carousel-dot">β</button> <button class="carousel-dot">β</button> <button class="carousel-dot">β</button> <button class="carousel-dot">β</button> <button class="carousel-dot">β</button> </div>
// CSS μμ .carousel-dot { background-color: transparent; border-style: none; cursor: pointer; font-size: 20px; line-height: 2.5; margin: 0 15px; color: grey; } .carousel-dot:focus { color: black; outline: none; }
// javascript μΆκ° - νλ¨μ Dot 5κ° const btn_1 = document.querySelectorAll('.carousel-dot')[0]; btn_1.addEventListener('click', function showImage () { presentImage.src = '/images/image-1.png'; }); const btn_2 = document.querySelectorAll('.carousel-dot')[1]; btn_2.addEventListener('click', function showImage () { presentImage.src = '/images/image-2.png'; }); const btn_3 = document.querySelectorAll('.carousel-dot')[2]; btn_3.addEventListener('click', function showImage () { presentImage.src = '/images/image-3.png'; }); const btn_4 = document.querySelectorAll('.carousel-dot')[3]; btn_4.addEventListener('click', function showImage () { presentImage.src = '/images/image-4.png'; }); const btn_5 = document.querySelectorAll('.carousel-dot')[4]; btn_5.addEventListener('click', function showImage () { presentImage.src = '/images/image-5.png'; });
- λ€μ― κ°μ μ λ€μ λλ₯΄λ©΄ κ°κ°μ μ΄λ―Έμ§κ° λμ¨λ€
- κ·Έλ°λ° μ΄κ±΄ μ λ§ λ무 μ€μ¬ μ£Όκ³ μΆκ² μκ²Όλ€. μλ§λ for ꡬ문μ μ°λ©΄ λ κ±° κ°μλ° μ ννκ² λ μ¨μΌ ν μ§λ₯Ό λͺ¨λ₯΄κ² λ€.
- λΈλ‘κ·Έμ μ 리ν΄λμ for λ°λ³΅λ¬Έλ€μ λ€μ ν λ² μ΄ν΄λ³Έ ν
forEach ꡬ문
μ μ¨λ³΄κΈ°λ‘ νλ€const btns = document.querySelectorAll('.carousel-dot'); btns.forEach(function clickBtn (btn, index) { btns[index].addEventListener('click', function showImage () { presentImage.src = `/images/image-${index+1}.png`; }); });
- κ·Έλ°λ° μ΄κ² μ¬κ±Έ, λλ€λλ€λλ€λλ€λλ€
- μ΄λ€ κ²μλ μμ΄ μ°¨κ·Όμ°¨κ·Ό νλμ© μκ°νλ©΄μ μ μ΄λ³Έ κ±΄λ° λ§νλ λΆλΆλ μμ΄ μ½λ μμ±μ΄ λλ ν μ€νκΉμ§ λ¬Έμ μμ΄ λ 건 μ΄ κ³Όμ λ₯Ό μμν μ΄λλ‘ μ΄λ²μ΄ μ²μμ΄λ€. λ무 μ κΈ°ν¨ π²
- κ·Έλ μ§λ§, μ΄κ±Έ ν΄λΈ κ²κ³Ό λ³κ°λ‘ μ΄λ² κ³Όμ λ₯Ό νλ©΄μ λΌμ λ¦¬κ² λλ 건, λλ for λ°λ³΅λ¬Έμ μ λͺ¨λ₯Έλ€λ κ±°λ€. μ΄ κ²½μ°λ forEach ꡬ문 μ€λͺ μ μ΄ν΄λ³΄λκΉ 'μ μ§' μ¬κΈ° μ μ©νλ©΄ λ κ±° κ°μμ νλμ© μ λ€λ³΄λ λ κ²½μ°λ€. μ¦, forEach κ΅¬λ¬Έμ΄ μ΄λμ λ κ±° κ°λ€κ³ μ½λλ₯Ό μ κΈ° μ λΆν° λͺ λ£νκ² λ¨Έλ¦Ώμμ μ 리ν΄μ λ§ν μλ μμλ€. μ¬λ¬λͺ¨λ‘ μ΄λ² κ³Όμ λ λ€μ νλ² μ΄μ΄νκ² κ³΅λΆν΄μΌ ν νμμ±μ μ μ€νκ² λλΌλλ‘ λ§λ€μ΄μ€ κ³Όμ μλ€.
carousel μ΅μ’
μ½λ
<section>
<div class="title-image-box">
<img src="/images/vanilla_coding_logo.png" />
</div>
<h1>Carousel</h1>
<!-- Carousel Start -->
<div class="carousel-outer">
<div class="carousel-image-and-arrow">
<button type="button" class="carousel-arrow left">
<i class="fas fa-arrow-circle-left"></i>
</button>
<div class="carousel-image-box">
<img src="/images/image-1.png" class="carousel-image">
</div>
<button type="button" class="carousel-arrow right">
<i class="fas fa-arrow-circle-right"></i>
</button>
</div>
<div class="carousel-dots">
<button class="carousel-dot">β</button>
<button class="carousel-dot">β</button>
<button class="carousel-dot">β</button>
<button class="carousel-dot">β</button>
<button class="carousel-dot">β</button>
</div>
</div>
<!-- Carousel End -->
</section>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
width: 100%;
}
body {
background-image: url("./images/bg.jpeg");
background-repeat: no-repeat;
background-size: cover;
font-family: "Varela Round", sans-serif;
}
section {
margin: 60px auto;
max-width: 1000px;
}
.title-image-box {
text-align: center;
padding: 0 80px;
}
.title-image-box img {
width: 100%;
max-width: 800px;
}
h1 {
font-family: "Pacifico", cursive;
text-align: center;
font-size: 5vw;
}
.carousel-outer {
display: flex;
flex-direction: column;
align-items: center;
background-color: white;
margin: 20px auto;
width: 80%;
}
.carousel-image-and-arrow {
display: flex;
justify-content: center;
align-items: center;
margin: 0 auto;
width: 100%;
margin-top: 50px;
}
.carousel-arrow {
background-color: transparent;
border-style: none;
width: 120px;
}
.fa-arrow-circle-left,
.fa-arrow-circle-right {
font-size: 30px;
cursor: pointer;
}
.carousel-image-box {
width: 70%;
margin: 0 auto;
}
.carousel-image {
width: 100%;
vertical-align: middle;
}
.carousel-dots {
text-align: center;
}
.carousel-dot {
background-color: transparent;
border-style: none;
cursor: pointer;
font-size: 20px;
line-height: 2.5;
margin: 0 15px;
color: grey;
}
.carousel-dot:focus {
color: black;
outline: none;
}
var presentImage = document.querySelector('.carousel-image');
// μ°μΈ‘ λ²νΌ
const rightArrow = document.querySelector('.right');
rightArrow.addEventListener('click', function goNext () {
const imageSrc = presentImage.getAttribute('src');
switch (imageSrc) {
case '/images/image-1.png':
presentImage.src = '/images/image-2.png';
break;
case '/images/image-2.png':
presentImage.src = '/images/image-3.png';
break;
case '/images/image-3.png':
presentImage.src = '/images/image-4.png';
break;
case '/images/image-4.png':
presentImage.src = '/images/image-5.png';
break;
case '/images/image-5.png':
presentImage.src = '/images/image-1.png';
break;
}
});
// μ’μΈ‘ λ²νΌ
const leftArrow = document.querySelector('.left');
leftArrow.addEventListener('click', function goBack () {
const imageSrc = presentImage.getAttribute('src');
switch (imageSrc) {
case '/images/image-1.png':
presentImage.src = '/images/image-5.png';
break;
case '/images/image-2.png':
presentImage.src = '/images/image-1.png';
break;
case '/images/image-3.png':
presentImage.src = '/images/image-2.png';
break;
case '/images/image-4.png':
presentImage.src = '/images/image-3.png';
break;
case '/images/image-5.png':
presentImage.src = '/images/image-4.png';
break;
}
});
// νλ¨μ Dot 5κ° - ex) indexκ° 0μΈ λ²νΌμ λλ₯Ό λ νλ©΄μ image-1 λμ°κΈ°
btns.forEach(function clickBtn (btn, index) {
btns[index].addEventListener('click', function showImage () {
presentImage.src = `/images/image-${index+1}.png`;
});
});
cf. λ°λ‘ μ μ§ μμμ§λ§, μ°μΈ‘ λ²νΌκ³Ό μ’μΈ‘ λ²νΌ λΆλΆλ if, else if, else ꡬ문μ switch ꡬ문μΌλ‘ λ€μ μ μ κ±΄λ° μ½λκ° λ§ κ·Έλ κ² μ€μ΄λ κ±° κ°μ§ μλ€. if κ΅¬λ¬Έλ³΄λ€ λ³΄κΈ°λ νΈν΄μ§ λ―νμ§λ§, μλ§ 200% λ μ€μΌ μ μμ§ μμκΉ.
μ΄λ κ² ν΄μ μ₯μ₯ κ½μ°¬ 3μΌμ κ±ΈμΉ
carousel
λ§λ€κΈ°κ° λμ΄ λ¬λ€. μ΄λ²μλ μ€λ κΈ°κ°μ κ±Έμ³ ν΄κ²°μ νκΈ΄ νμ§λ§, μ μ²λΌ λΏλ―νκΈ°λ³΄λ¨ μ’ λ νμ€μ μ§μν λλμ΄λ€.(λ¬Όλ‘ μ²μμ λλ κ±° 보면μ λ¬Όκ°λ°μ μΉκΈ΄ νμ)μμμλ λ§νμ§λ§, μ΄λ² κ³Όμ λ₯Ό ν΄κ²°νλ κ³Όμ μμ λ΄κ° λͺ¨λ₯΄κ³ ν·κ°λ € νλ κ²λ€μ΄ μμ μ΄μμΌλ‘ λ§λ€λ κ±Έ μκ² λλ€. λΉμ°ν μκΈ°μ§λ§, μ΄ν΄ν μ² μ΄λ‘ μ μ 리νλ κ²κ³Ό μ§μ§λ‘ μ΄ν΄ν κ±Έ μ§μ μ½λλ‘ μ¨λ³΄λ 건 μ²μ§ μ°¨μ΄μΈ κ±° κ°λ€.
μ΄λμ λ³Έ 건 μμ΄μ μ΄κ±Έ μ°λ©΄ λ κ±° κ°μλ° μ λλ€. λμΌλ‘ 보면 λμΆ© μλ κ² κ°μ§λ§, μ€μ λ΄ μ€μ€λ‘ λ΄κ° ν·κ°λ € νλ λΆλΆμ΄ μ΄λμ§λ₯Ό λͺ ννκ² νκ΅μ΄λ‘ μκΈ°νλ κ²λΆν°λ μ΄λ €μ΄ κ±° κ°λ€. κ²μμ νλ©΄μλ μ§μ μ 보λ₯Ό μ ννλ κ² μλλΌ μ΄λ°μ λ° μ 보μ νλλ¦¬κΈ°λ§ νλ λλ₯Ό λ°κ²¬νκΈ°λ νλ€.
κ·Έλλ λκΉμ§ ν¬κΈ°νμ§ μκ³ , carouselμ΄λ λ¨μ΄λ₯Ό μ§μ κ²μνμ§ μκ³ ν΄λΈ κ²λ§νΌμ λΏλ―νλ€. μΌμ μ μ‘°κΈ μ§μ²΄λμ§λ§, μ€κ°μ ν¬κΈ°νκ³ λ€λ₯Έ μ¬λμ λ΅μ λ΄€λ€λ©΄ μμ νννμ κ±° κ°λ€. λμ€μ λ€μ 보면 μμ²λκ² ν¬λ°ν λ΅μ΄κ² μ§λ§, μ§κΈμ λλ¦ μ μ
(μ μ¦)μ΄ λ΄κ²¨ μλ μνλΌ κ³μ λ³΄κ² λλ κ±° κ°λ€.μΈμ λμ κ°μ΄ λ΅λ΅νμ§λ§, ν¬κΈ°νμ§ μμμ μλ―Έ μλ μκ°μ΄μλ€. λΆκ³Ό μ΄μ λ§ ν΄λ λ€μ μ΄λ‘ 곡λΆλ₯Ό νκ³ μΆλ€κ³ νμλλ° κ³Όμ λ₯Ό ν΄κ²°νκ³ λλκΉ μμ μ€μ΅μ΄ λ μ¬λ°λ κ±° κ°λ€.
μ΄λ κ² λλμ΄ STEP 4κΉμ§ λμ΄ λκ³ STEP 5λ₯Ό λ€μ΄κ° μ°¨λ‘μ΄λ€. μ¬μ© νμ΄ λ΄λ μ΄λ² κ³Όμ λ₯Ό ν¬ν¨ν΄μ λ΄κ° κ·Έλμ ν·κ°λ Έλ κ²λ€μ λ€λ£¨κ³ μλ κ±° κ°λ€. κ·Όλ° μ°Έ μΈν°λ· κ²μμ ν΅ν΄ μλ£λ₯Ό 보면 μ΄ν΄ν κ±° κ°μλ° λ§μ μ μ©νλ €κ³ νλ©΄ 머리λ μμ΄ μ μμ§μΈλ€. μ΄λ² STEPμ΄ λμμ΄ λμΌλ©΄ μ’κ² λ€.
μΆκ° μ΄λ‘ κ°μλ λ λ£κ³ μΆμλ° μΌλ¨μ μ¬μ νμ΅ κ°μ΄λλ₯Ό λ¨Όμ λ΄μΌκ² λ€. λ¨μ μ€μ΅μ΄ 3κ°μΈλ° λ¬Έμ λ₯Ό νΈλ λ° μ£Όμ΄μ§ κΈ°κ°μ΄ μ΅λ 13μΌμ΄λΌκ³ μ ν μλ€. κ΄ν λ€λ₯Έ κ°μλ₯Ό λ¨Όμ λ€μλ€κ° μ΄κ±Έ λͺ»νκ² λλ©΄ λν¨λκΉ μΌλ¨μ μ£Όμ΄μ§ κ²λΆν° ν μκ°μ΄λ€.