[TIL] 210913
63904 ワード
📝 今日作った
getAttribute()/switch()/:focus/forEach()
carouselの実装が完了しました
📖 学習資料
📚 学識
DOM
1.カロッセル(カロッセル)
1.カロッセル(カロッセル)
<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';
}
});
<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';
}
}
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';
}
}
答えのキーワードは<!-- 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()
をsrc
に変換するだけでよい... getAttribute('src')
<!-- 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';
});
이미지 하단의 Dot를 누를 경우, 해당 순번의 이미지 보여주기
を試してみることにしました.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`;
});
});
2.forEach構文
< HTML >
<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>
< CSS >
* {
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;
}
< JavaScript >
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文で書き換えられており、コードはさっきのように減少していません.文法より楽に見えるなら、200%減るかもしれません.3.感じ
これで3日間にわたる
carousel 최종 코드
の制作が完了しました.今回も長い間解決してきましたが、以前のように満足しているよりも、現実に直面しているような気がします.(もちろん、私は初めてその様子を見て拍手しました)前にも言いましたが、今回の課題を解決する過程で、私が知らない、混同しているものが想像以上に多いことに気づきました.当たり前だが、理论を理解しているふりをするのと、本当に理解していることを直接コードで书くのとでは天と地の违いのようだ.
どこかで見たことがあるのでこれを使えばいいのですがダメです目で見れば分かるかもしれませんが、実は私が混同しているところがどこなのかを韓国語で明確に言うのは難しいのです.検索していても、私は直接情報を選ぶのではなく、いろいろな情報に左右されていることに気づきました.
でも最後まであきらめずに、carouselという言葉を自分で検索しなかったことができて、それができて嬉しいです.少しスケジュールが遅れていますが、途中で諦めて他の人の答えを見たら、私も後悔します.後で見るととても粗雑な答えになりますが、今は愛情(愛憎)が込められた状態なので、ずっと見続けます.
相変わらず鬱陶しいですが、諦めていないので有意義な時間でした.しかし、昨日は理論を勉強し直したいと言っていましたが、課題を解決した後、実習はもっとおもしろかったようです.
4.今後の学習計画
いよいよSTEP 4が終わってSTEP 5に入りますちょっと見て、今回の課題も含めて、私はこの間混同していたものを処理しているようです.でもネット検索で資料を見ると理解できそうだけど応用しようとすると頭も手も動かない今回のSTEPが役に立つことを願っています
私はまた追加の理論の授業を聞きたいですが、まず予習ガイドを見なければなりません.残りの3つの実習は、解答時間が最大13日です.まず別の講座を聞いて、それができなければ大変なので、既存のものから始めるつもりです.
明日作った
Reference
この問題について([TIL] 210913), 我々は、より多くの情報をここで見つけました https://velog.io/@leesyong/TIL-210913テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol