ě´ě íě´ěě ě´ě´ě
(1) javascript ěěą
- íěŹ 'ě°ě¸Ą ë˛íź' ë뼟 ëë§ë¤ 'ě°ěěźëĄ' ë¤ě ě´ëŻ¸ě§ëĄ ëě´ę°ëëĄ ë§ëë ë°ęšě§ 꾏íë ěí
// `ě°ě¸Ą` íě´í í´ëŚ ě ë¤ě ě´ëŻ¸ě§ ëł´ěŹěŁźę¸° const rightArrow = document.querySelector('.right'); rightArrow.addEventListener('click', function goBack () { var presentImage = document.querySelector('.carousel-image'); presentImage.nextElementSibling.style.display = 'inline'; presentImage.remove(); }); // `ě˘ě¸Ą` íě´í í´ëŚ ě ě´ě ě´ëŻ¸ě§ ëł´ěŹěŁźę¸° const leftArrow = document.querySelector('.left'); leftArrow.addEventListener('click', function goNext () { var presentImage = document.querySelector('.carousel-image'); presentImage.previousElementSibling.style.display = 'inline'; presentImage.remove(); });
- ꡸ëŹë â 'ě˘ě¸Ą ë˛íź'ě ëë ě ë ě´ě ě´ëŻ¸ě§ëĄ ëě´ę°ë ęą´ ěě§ ěëë ěí
- ě˘ě¸Ą ë˛íź ěěě presentImage ëłěę° ę°ë ę°ě´ 돴ěě¸ě§ ěě보기 ěí´ console.log ě¤íí´ë´¤ëë ě´ë ę˛ ë´ë¤
var presentImage = document.querySelector('.carousel-image'); console.log(presentImage); // 3ë˛ě§¸ ě´ëŻ¸ě§ ěśë Ľ console.log(presentImage.nextElementSibling); // 4ë˛ě§¸ ě´ëŻ¸ě§ ěśë Ľ console.log(presentImage.previousElementSibling); // null
- console ě°˝ě ě¤ëĽë ë¸
Uncaught TypeError: Cannot read properties of null (reading 'style') at HTMLButtonElement.goNext- ěŚ, presentImage.previousElementSiblingę° nullě´ëź 몝 ě˝ëë¤ë ëť
- ꡸ë ë¤ëŠ´ ě´ě ěěë ë¤ě ěěë ëę°ě´ HTMLěë display: noneě´ ě ěŠëě´ ěëë° ě ë¤ě ěěë§ ě°íęł ě´ě ěěë ě ě°íë 깸ęš
- ěźë¨ display: noneęłź ę´ë ¨ě´ ěë ěśě´ě 'display: none null'ëĄ ę˛ě
- ě¨ę¸°ęł ěśě ě´ëŻ¸ě§ë¤ě display: noneě ě¤ě íë ëě position: absolute뼟 ě´ěŠí´ě ě°ěŁź ęłľę°ěźëĄ ëł´ë´ë˛ëŚŹë ë°Šë˛ě´ ěëě ěëí´ ë´
position: absolute; top: -9999px; left: -9999px;
- 2~5ë˛ě§¸ ě´ëŻ¸ě§ ëśëś CSSě display: none ëě ě´ ë´ěŠě ěśę°íęł ěë°ě¤íŹëŚ˝í¸ ě´ë˛¤í¸ 댏ě¤ëě style.display ëśëśë positioněźëĄ ěě
- ꡸ëŹë ěě ěë¨
- ę˛ěě ë íë¤ę° addEventListener ëě onclickě ě¨ëł´ëźë 쥰ě¸ě ë´ě í´ë´¤ëë° ěë¨
- ě´ě ę˛ěí´ëł¸ ęšě ë°°ě´ ë´ěŠě ě 댏íě
đĄ
click
ęłźonclick
ě ě°¨ě´ě (1) 꾏돸
- click
element.addEventListener('click', function () { // ě´ë˛¤í¸ 댏ě¤ë ěŚ, í¨ě ë´ěŠ });
- onclick
element.onclick = function () { // í¨ě ë´ěŠ }
(2) ë˛ë¸ë§, 캥ěłë§ ě¤ě ěŹëś
- click: ě´ë˛¤í¸ 댏ě¤ëě 3ë˛ě§¸ 매ę°ëłěě true/false ę° ëŁě´ě ě¤ě ę°ëĽ
- onlick : ě¤ě ëśę°ëĽ
(3) í ěěě ěŹëŹ ę°ě í´ëŚ ě´ë˛¤í¸ę° ëąëĄëěě ë ě˛ëŚŹ ěŹëś
= í´ëŚ ě´ë˛¤í¸ 댏ě¤ëę° ěŹëŹ ę°ěź ë, onclick ęľŹëŹ¸ě´ ěŹëŹ ę°ěź ë
- click : ě´ë˛¤í¸ 댏ě¤ë ëě ě¤í ę°ëĽ
- onclick: ëě ě¤í ëśę°ëĽ, ëŽě´ě°ę¸° ëě´ě ë§ě§ë§ ęľŹëŹ¸ë§ ě¤íë¨
- ě´ęą´ ě´ęą°ęł ë¤ě ëł¸ëĄ ěźëĄ ëěěě, 돸ě ę° display: noneë ěëęł clickë ěëëźëŠ´ ěě previousElementSibling ěě˛´ę° ëŹ¸ě ěëęš ěśě´ě
previousElementSibling null
ëĄ ę˛ěí´ ë´- mdn ěŹě´í¸ěě ě ě ëśëśě ë˛ěí´ëł´ëŠ´
- Element.previousElementSibling ě˝ę¸° ě ěŠ ěěąě ëśëިě ěě 몊ëĄěě ě§ě ë ěě ë°ëĄ ěě ěě뼟 ë°ííë¤. ě§ě ë ěěę° ëŞŠëĄě 첍 ë˛ě§¸ ěěě¸ ę˛˝ě°ěë nullě ë°ííë¤.
- đ¤¨??? ěěě console.log ěśë Ľíë ę°ě ë¤ě ę°ě ¸ě¤ëŠ´,
var presentImage = document.querySelector('.carousel-image'); console.log(presentImage); // 3ë˛ě§¸ ě´ëŻ¸ě§ ěśë Ľ console.log(presentImage.nextElementSibling); // 4ë˛ě§¸ ě´ëŻ¸ě§ ěśë Ľ console.log(presentImage.previousElementSibling); // null
- ě§ě ë ěě ěŚ, presentImageę° ëŞŠëĄě 첍 ë˛ě§¸ ěěę° ěëęł 3ë˛ě§¸ ěěě¸ë°ë null ę°ě´ ěśë Ľëë ęą´ ěěŁ ? nextElementSiblingě ěë§ ëě¤ëë° previousElementSiblingě ě ě ëě¤ë 깸ęš.
- ě˘ě¸Ą íě´í뼟 ě°ęľŹíęł ěěëë° ę˛ěě íë ě¤ě ě´ěŠë¤ę° '5ë˛ě§¸ ě´ëŻ¸ě§ěě ě°ě¸Ą íě´í뼟 ë뼟 경ě°, 1ë˛ě§¸ ě´ëŻ¸ě§ ëł´ěŹěŁźę¸°'ëĄ ëě´ě´
const rightArrow = document.querySelector('.right'); rightArrow.addEventListener('click', function goBack () { var presentImage = document.querySelector('.carousel-image'); // ë§ě§ë§(5ë˛ě§¸) ě´ëŻ¸ě§ěě ě°ě¸Ą íě´í뼟 í´ëŚ ě, 첍 ë˛ě§¸ ě´ëŻ¸ě§ ëł´ěŹěŁźę¸° if (presentImage === presentImage.parentElement.lastElementChild) { var firstImage = presentImage.parentElement.firstElementChild; // ěŹę¸°ě firstImage ëłěě 첍 ë˛ě§¸ img뼟 í ëší´ 죟ěëë° console.log(presentImage); // ë§ě§ë§ img ěěę° ěśë Ľë¨ console.log(firstImage); // đ˘ 돸ě ë°ě â console ě°˝ě 첍 ë˛ě§¸ img ěěę° ěëëź ěŹę¸°ěë ë§ě§ë§ img ěěę° ěśë Ľë¨ firstImage.style.display = 'inline'; // ěŚ, ěŹę¸°ěë ë§ě§ë§ ě´ëŻ¸ě§ě display: inlineě ě ěŠí ę˛ě´ ëęł presentImage.remove(); // display: inline ě ěŠí ě´ëŻ¸ě§ëĽź ěŹę¸°ě ěě í ęą°ě // â ëšě°í ěë í늴ě ëł´ě´ë ë§ě§ë§ imgë§ ěŹëźě§ ëż, 첍 ë˛ě§¸ imgę° ë° ëŚŹ ë§ëŹ´í¨ } // ë머ě§(1~4ë˛ě§¸) ě´ëŻ¸ě§ěě ě°ě¸Ą íě´í í´ëŚ ě, ë¤ě ě´ëŻ¸ě§ ëł´ěŹěŁźę¸° else { console.log(presentImage); console.log(presentImage.nextElementSibling); presentImage.nextElementSibling.style.display = 'inline'; presentImage.remove(); } });
- display: none ëě ě
z-index
뼟 ěŹěŠí´ ëł´ę¸°ëĄ í¨- z-index뼟 ě ěŠí기 ěí´ě img ěěë¤ě position: absolute뼟 ě§ě í´ěŁźëęš imgę° ëś ë ë˛ëŚŹęł , ëśëި ěěě¸ .carousel-image-boxě ëě´ë 0ě´ ë¨
- ęˇ¸ëĽ ëśëި ěěě ęł ě ę°ě ëě´ëĽź ě§ě í´ěŁźë ęą° ë§ęł , ë°ěíě ě ě§í늴ě ě´ ëŹ¸ě 뼟 í´ę˛°í기 ěí´ ë ę˛ěě íë¤ę° ěë ë°Šë˛ě ë°ę˛Źí´ě ě ěŠí긴 íë¤
- ęˇźë° ě´ę˛ ěśí ěë°ě¤íŹëŚ˝í¸ 꾏íě ë°Ší´ę° ë ęą° ę°ě ëśę¸¸í ëëě ě¸ ëë
<div class="carousel-image-box"> <img src="images/image-3.png" class="invisible"> // â í´ę˛°ě ěí´ ěśę°í ěě <img src="/images/image-1.png" alt="image-1" class="carousel-image one"> <img src="/images/image-2.png" alt="image-2" class="carousel-image two"> <img src="/images/image-3.png" alt="image-3" class="carousel-image three"> <img src="/images/image-4.png" alt="image-4" class="carousel-image four"> <img src="/images/image-5.png" alt="image-5" class="carousel-image five"> </div>
.carousel-image-box { position: relative; width: 70%; margin: 0 auto; } // í´ę˛°ě ěí´ ěśę°í ěěě CSS .invisible { width: 100%; vertical-align: middle; visibility: hidden; } .carousel-image { position: absolute; width: 100%; top: 50%; left: 50%; transform: translate(-50%, -50%); } .one { z-index: 4; } .two { z-index: 3; } .three { z-index: 2; } .four { z-index: 1; } .five { z-index: 0; }
- ëŠě˛íę˛ë ěŹě íěľ ę°ě´ë ęśęł ěŹíě ë°Šę¸ ë°ę˛Źí¨
// ě´ëŻ¸ě§ ëłę˛˝ě ěëě ę°ě´ ě´ëŻ¸ě§ ěěě src뼟 ëłę˛˝íë ë°ŠěěźëĄ íë ę˛ě ęśěĽíŠëë¤. someImageElement.src = "/images/image-1.png";
- style.display: noneë§ ě°ë ¤ęł íëë° ě´ëŻ¸ě§ 죟ě ěěąě ěě ë°ężë˛ëŚŹë ë°Šë˛ë ěěě
đ ě´íëĄ ě¨ę° 깸 ë¤ í´ë´¤ëë° ěíęšę˛ë ě¤ë ěě í´ę˛°ě´ ě ëë¤. ě¤í¨í ě˝ëë¤ęšě§ ꡸ë꡸ë ë¸ëĄęˇ¸ě 기ëĄíë ę˛ë ěŹě¤íą íęł íëŁ¨ě˘ ěź ě´ę˛ě ę˛ ěë뼟 í´ë´¤ëë° ěë¨. carousel ě§ě ę˛ěě íźíë¤ę° ë°Šę¸ ě ě ěŹěŠ ę˛ěí´ ë´¤ëë° ë´ę° í댰 ëěźëĄ ë´ě ꡸ë°ě§ë 몰ëźë carouselěë ě˘ ëĽę° ěŹëŹ ę°ě§ëź ě´ ę˛˝ě°ë ě ë¨ě§ë ěë ęą° ę°ě.
íë¤íë¤ ě ë늴 ě ëŁ ę°ě뼟 ě°žěě ëł´ëëźë ě´í´íęł ěź ë§ë¤ ë´ę°. ě´ěŻ¤ ë늴 ě¤ę¸° ě겨ě ě ëę˛ ě. ëę° ě´ę¸°ë í´ëł´ě.