티스토리 뷰

JavaScript

event & tab

정낭고 2023. 6. 8. 14:49

event (이벤트)

🙾  대상.addEventListener('이벤트종류', 할 일)

🙾  이벤트 종류

- mouseover, mouseout, mouseenter, mouseleave
- click
- scroll
- change (= input, select, radio, checout을 변경 할 때)

🙾  <head></head> 사이에 

 

ex) 변수 mypara에 p태그 mouseover시 배경색 silver로 저장(할당)

var mypara = document.querySelector('.container p');

mypara.addEventListener('mouseenter', function(){
    console.log('이벤트 발생');
    mypara.style.backgroundColor = 'silver';
 });

 mypara.addEventListener('mouseleave', function(){
     mypara.style.backgroundColor = '';
 });

// 위의 방식과 비슷한 종류(mouseover / mouseout)
var mypara = document.querySelector('.container p');
mypara.addEventListener('mouseover', function(){
    mypara.style.backgroundColor = 'silver';
});

var mypara = document.querySelector('.container p');
mypara.addEventListener('mouseout', function(){
    mypara.style.backgroundColor = '';
});

 

ex) Click me 버튼을 누르면 위의 p태그 text가 파란색으로 변경

var mybtn = document.getElementById('submit');
mybtn.addEventListener('click', function(){
    mypara.style.color = 'blue';
})

 

ex) 색상을 클릭시 body의 배경색이 선택된 색상으로 변경

var selectColor = document.querySelector('#color');
var body = document.body;
// var body = document.querySelector('body');
// var body = document.getElementsByTagName('body');
selectColor.addEventListener('change', function(){
    var sclectedVal = this.value;
    body.style.backgroundColor = sclectedVal;
})

➡ change event가 일어난 요소: this

 


Tab (탭)

▏class

🙾  대상.classList.className('클래스명');

- 클래스명 교체

🙾  대상.classList.add('클래스명');

🙾  대상.classList.remove('클래스명');

🙾  대상.classList.contains('클래스명'); 

- true, false 조건문에서만 사용

- 클래스명이 있는 지 확인

 

▏highlight

🙾  요소의 위치를 파악하는 법

- 대상.offsetLeft : 가까운 부모 중 포지션 값이 기본 값이 아닌 요소를 기준 위치 반환

🙾  요소의 너비를 파악하는 법

- 대상.offsetWidth

🙾  요소의 높이를 파악하는 법

- 대상.offsetHeight

 

▏탭구현 방법: 속성명 활용

let tabMenu = document.querySelectorAll('.tab-menu li');
let tabContent = document.querySelectorAll('#tab-content > div');

tabMenu.forEach(item=>{
  item.addEventListener('click',(e)=>{
    e.preventDefault();

    for(let list of tabMenu){
      list.classList.remove('active');
    }
    e.currentTarget.classList.add('active');

    // let targetId = e.target.getAttribute('href'); 
    let targetId = e.target.getAttribute('href'); 
    
    //모든 tabcontent 보이지 않도록
    for(let content of tabContent){
      content.style.display = 'none';
    }
    document.querySelector(targetId).style.display = 'block';
  });
});

 

▏탭구현 방법: 인덱스 번호

/*
tabMenu를 클릭하면 할일
모든 메뉴에서 active를 제거하고, 클릭한 그 요소에만 active 추가
클릭한 그 요소의 속성명 data-num의 값을 변수명 targetNum에 저장
모든 tabcontent를 안보이도록 하고,
targetNum에 저장된 숫자 번째 tabcontent가 보이도록
*/

let tabMenu = document.querySelectorAll('.tab-menu li');
let tabContent = document.querySelectorAll('#tab-content > div');

tabMenu.forEach((item,index)=>{
  item.addEventListener('click', e=>{
    e.preventDefault();
    for(let menu of tabMenu){
      menu.classList.remove('active');      
    }
    e.currentTarget.classList.add('active');

   for(let content of tabContent){
    content.classList.remove('active');
  }
  tabContent[index].classList.add('active');

  })
});
let tabMenu = document.querySelectorAll('.tab-menu li');
let tabContent = document.querySelectorAll('#tab-content > div');

tabMenu.forEach(item=>{
  item.addEventListener('click', e=>{
    e.preventDefault();
    for(let menu of tabMenu){
      menu.classList.remove('active');      
    }
    e.currentTarget.classList.add('active');

    let targetNum = e.currentTarget.getAttribute('data-num');

    for(let content of tabContent){
      content.style.display = 'none';
    }

    tabContent[targetNum].style.display= 'block';
  })
});

 

▏탭구현 방법: activateTab 함수를 생성

/*
activateTab함수를 생성
이함수는 숫자가 들어오면, 숮자는 num
모든메뉴에서 active를 제거하고,
num번째 메뉴에 active 추가

모든 컨텐트에서 active를 제거하고,
num번째 컨텐트에 active 추가한다.

tabMenu를 클릭하면 할일
클릭한 그 요소의 index를 함수 activateTab에 전달;
*/

let tabMenu = document.querySelectorAll('.tab-menu li');
let tabContent = document.querySelectorAll('#tab-content > div');

function activateTab(num){
  for(let list of tabMenu){
    list.classList.remove('active');
  }
  tabMenu[num].classList.add('active');

  for(let content of tabContent){
    content.classList.remove('active');
  }
  tabContent[num].classList.add('active');
}

tabMenu.forEach((item,index)=>{
  item.addEventListener('click', e=>{
    e.preventDefault();
    activateTab(index);
  })
});

activateTab(0);

 

 

 

 

 

 

'JavaScript' 카테고리의 다른 글

slideshow / sideshow  (0) 2023.06.14
accordion / modal / back to top  (0) 2023.06.14
Selector (선택자)  (0) 2023.06.07
Timer & Math  (0) 2023.06.05
문자열 (IndexOf, Search / concat / replace / slice / split / length)  (0) 2023.06.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함