이벤트가 발생했을 때, 그 형제 요소를 조작하는 방법
개요
jQuery를 사용하지 않고 구현하는 것을 목표로합니다.
동일한 구조를 갖는 요소가 복수 존재할 때, 그 중에서 이벤트가 발생한 형제 요소만을 조작하고 싶은 경우의 실장 방법이다.
구현 예
클릭하면 그 형제 요소에 해당하는 이미지를 작게하는 버튼을 구현. 이번에는 같은 구조의 요소를 4개 준비.
HTML과 CSS
참고 정도에 게재
HTML<ul class="item-list">
<li class="item-list__item">
<img src="images/1.jpeg" alt="img1" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/2.jpeg" alt="img2" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/3.jpeg" alt="img3" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/4.jpeg" alt="img4" class="img-op">
<button class="popup-btn btn">look</button>
</li>
</ul>
SCSSbutton {
overflow : hidden;
outline : none;
}
.text-center {
text-align: center;
}
.img-pc {
display:none;
}
.wrapper {
box-sizing: border-box;
padding: 0 20px;
}
.btn {
display: block;
border-radius: 2px;
-webkit-appearance:none;
appearance:none;
padding: 8px 16px;
font-size: 1.2rem;
border:none;
color: #fff;
background-color: $main-color;
font-family: 'Montserrat', sans-serif;
outline: none;
cursor: pointer;
}
.item-list {
//パラメータ
$marginLeft: 16px;
//プロパティ
display: flex;
justify-content: center;
flex-wrap: wrap;
margin-top: 32px;
margin-left: (-1 * $marginLeft);
padding: 0 16px;
&__item {
display: block;
margin-top: 32px;
margin-left: $marginLeft;
width: 200px;
}
}
.img-op {
width: 240px;
height: 96px;
display: block;
border-radius: 8px;
object-fit: cover;
&.active {
transform: scale(0.5);
}
}
.img-input {
display: none;
}
.popup-btn {
display: block;
margin: 16px auto;
}
자바스크립트
자바스크립트//popup-btnクラスの要素を全て取得
let popupBtns = Array.from(document.getElementsByClassName('popup-btn'));
popupBtns.forEach(function(popupBtn) {
//その中からクリックイベントが発生した要素を取得
popupBtn.addEventListener('click', function() {
//親要素に遡り、ymg-opクラスの要素を取得。activeクラスをtoggle。
popupBtn.parentElement.getElementsByClassName('img-op')[0].classList.toggle('active');
});
});
구현 팁
사고방식으로는 다음과 같다.
jQuery라면 간단하지만, 생js라면 상당히 귀찮은.
클릭하면 그 형제 요소에 해당하는 이미지를 작게하는 버튼을 구현. 이번에는 같은 구조의 요소를 4개 준비.
HTML과 CSS
참고 정도에 게재
HTML
<ul class="item-list">
<li class="item-list__item">
<img src="images/1.jpeg" alt="img1" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/2.jpeg" alt="img2" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/3.jpeg" alt="img3" class="img-op">
<button class="popup-btn btn">look</button>
</li>
<li class="item-list__item">
<img src="images/4.jpeg" alt="img4" class="img-op">
<button class="popup-btn btn">look</button>
</li>
</ul>
SCSS
button {
overflow : hidden;
outline : none;
}
.text-center {
text-align: center;
}
.img-pc {
display:none;
}
.wrapper {
box-sizing: border-box;
padding: 0 20px;
}
.btn {
display: block;
border-radius: 2px;
-webkit-appearance:none;
appearance:none;
padding: 8px 16px;
font-size: 1.2rem;
border:none;
color: #fff;
background-color: $main-color;
font-family: 'Montserrat', sans-serif;
outline: none;
cursor: pointer;
}
.item-list {
//パラメータ
$marginLeft: 16px;
//プロパティ
display: flex;
justify-content: center;
flex-wrap: wrap;
margin-top: 32px;
margin-left: (-1 * $marginLeft);
padding: 0 16px;
&__item {
display: block;
margin-top: 32px;
margin-left: $marginLeft;
width: 200px;
}
}
.img-op {
width: 240px;
height: 96px;
display: block;
border-radius: 8px;
object-fit: cover;
&.active {
transform: scale(0.5);
}
}
.img-input {
display: none;
}
.popup-btn {
display: block;
margin: 16px auto;
}
자바스크립트
자바스크립트
//popup-btnクラスの要素を全て取得
let popupBtns = Array.from(document.getElementsByClassName('popup-btn'));
popupBtns.forEach(function(popupBtn) {
//その中からクリックイベントが発生した要素を取得
popupBtn.addEventListener('click', function() {
//親要素に遡り、ymg-opクラスの要素を取得。activeクラスをtoggle。
popupBtn.parentElement.getElementsByClassName('img-op')[0].classList.toggle('active');
});
});
구현 팁
사고방식으로는 다음과 같다.
jQuery라면 간단하지만, 생js라면 상당히 귀찮은.
라는 주위의 굉장한 절차를 밟는 것에 의해, 드디어 형제 요소를 조작할 수 있다.
Reference
이 문제에 관하여(이벤트가 발생했을 때, 그 형제 요소를 조작하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/homusuke/items/b63fc0f516f7052da483텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)