DOM / events

자바스크립트 이벤트 트리거 개론

d 출처 -Codeacamedy

.addEventListener()

let eventTarget = document.getElementById('targetElement');
 
eventTarget.addEventListener('click', function() {...})

.onevent

let eventTarget = document.getElementById('targetElement');
 
eventTarget.onclick = function() {...}

또한 event handler를 DOM 요소들에 .onevent 값을 붙여서 사용할 수 있다. 특정 이벤트를 등록하기 위한 패턴은 이벤트 형식 이른에 lowercased로 .on을 붙여서 사용된다.

Toggle view/close buttons

let view = document.getElementById('view-button'); // 처음엔 view버튼만 있다.
let close = document.getElementById('close-button'); // 닫기 버튼
let codey = document.getElementById('codey'); // 이미지

let open = function() {
  codey.style.display = 'block';
  close.style.display = 'block';
};

let hide = function() {
  codey.style.display = 'none';
  close.style.display = 'none';
};

view.addEventListener('click', open);
close.addEventListener('click', hide);

function textChange(){
  view.innerHTML = 'Hello, World';
}

function textReturn(){
  view.innerHTML = 'View';
}

view.addEventListener('click', textChange);
close.addEventListener('click', textReturn);

Event Handler 없애기

.removeEventListener().addEventListener()와 반대되는 매서드이다. 이 매서드는 event target의 EventListener가 더 이상 필요없을 때 그 기능을 제거할때 사용한다. .removeEventListener() 또한 두 가지의 인자를 받는다.

Event Object Properties

자바스크립트는 이벤트들을 그에 관련된 데이터들과 기능들과 함께 메소드와 값들을 event object로서 저장한다. 이벤트가 트리거 됬을때 이 event object가 인자처럼 event handler에 통과된다.

예시

let social = document.getElementById('social-media');
let share = document.getElementById('share-button');
let text = document.getElementById('text');

let sharePhoto = function(event) {
  event.target.style.display = 'none';
  //.target은 이벤트에 설정 되어 있는 요소를 참조한다.(이 경우는 share를 참조한다.)
  text.innerHTML = event.timeStamp;
}

share.addEventListener('click', sharePhoto)

예시2

let button = document.getElementById('color-button');
let mysteryButton = document.getElementById('next-button');

function colorValue() {
  return Math.floor(Math.random() * 256);
}

function colorChange(event){
  let randomColor = 'rgb(' + colorValue() + ',' + colorValue() + ',' + colorValue() + ')';

  event.target.style.backgroundColor = randomColor;
}

button.addEventListener('click', colorChange); //클릭 값이 있을 때마다 colorChange가 실행된다.
mysteryButton.addEventListener('wheel', colorChange) //휠 값이 적용될 때마다 colorChange가 실행된다.

Event Types

예시1 - 박스들

let itemOne = document.getElementById('list-item-one');
let itemTwo = document.getElementById('list-item-two');
let itemThree = document.getElementById('list-item-three');
let itemFour = document.getElementById('list-item-four');
let itemFive = document.getElementById('list-item-five');
let resetButton = document.getElementById('reset-button');

// reset은 모든 스타일 값을 없애 이벤트가 일어나기 전 값으로 돌아간다.
let reset = function() {
  itemOne.style.width = ''
  itemTwo .style.backgroundColor = ''
  itemThree.innerHTML = 'The mouse must leave the box to change the text'
  itemFive.style.display = "none"
};
resetButton.onclick = reset;

function increaseWidth(){
  itemOne.style.width = '500px';
}
function changeBackground() {
  itemTwo.style.backgroundColor = 'blue'
}
function changeText() {
  itemThree.innerHTML = 'The mouse has left the element'
}
function showItem() {
  itemFive.style.display = 'block';
}

itemOne.addEventListener('mouseover', increaseWidth)
itemTwo.addEventListener('mouseup', changeBackground)
itemThree.addEventListener('mouseout', changeText)
itemFour.addEventListener('mousedown', showItem)

예시2 - 공 튕기기

let ball = document.getElementById('float-circle');

function up() {
  ball.style.bottom = '250px';
}

function down() {
  ball.style.bottom = '50px';
}

document.addEventListener('keydown', up);
document.addEventListener('keyup', down);