MouseEvent.button
: 마우스의 각 버튼 별로 이벤트를 구분하고 싶을 때
MouseEvent.type
하나의 동작에 여러 이벤트들이 발생할 수 있음
사용예시: 청기, 백기
const flagBlue = document.querySelector('.flag-blue');
const flagWhite = document.querySelector('.flag-white');
function reset() {
document.querySelector('.up').classList.remove('up');
}
// 1. flagUp 함수를 완성해 주세요
function flagUp(e) {
// 여기에 코드를 작성해 주세요
if (e.button === 0) {
flagBlue.classList.add('up');
} else if (e.button === 2) {
flagWhite.classList.add('up');
}
// 500 밀리초 뒤에 reset함수를 실행
setTimeout(reset, 500);
}
// 2. 마우스 오른쪽 버튼 클릭시 나타나는 메뉴창을 막아주세요
document.addEventListener('contextmenu', function (event) {
// 여기에 코드를 작성하세요
event.preventDefault();
});
// 테스트 코드
document.addEventListener('mousedown', flagUp);
MouseEvent.type
MouseEvent.clientX, clientY
: 화면에 표시되는 창 기준 마우스 포인터 위치
MouseEvent.pageX, pageY
: 웹 문서 전체 기준 마우스 포인터 위치
MouseEvent.offsetX, offsetY
: 이벤트가 발생한 요소 기준 마우스 포인터 위치
MouseEvent.target
: 이벤트가 발생한 요소MouseEvent.relatedTarget
: 이벤트가 발생하기 직전(또는 직후)에 마우스가 위치해 있던 요소const box2 = document.querySelector('#box2');
function printEventData(e) {
console.log('event:', e.type);
console.log('target:', e.target);
console.log('relatedTarget:', e.relatedTarget);
console.log('------------------------------------');
if (e.target.classList.contains('cell')) {
e.target.classList.toggle('on');
}
}
box2.addEventListener('mouseover', printEventData);
box2.addEventListener('mouseout', printEventData);
mouseenter
: mouseover처럼 마우스 포인터가 요소 바깥에서 안쪽으로 들어갈 때 mouseleave
: mouseout처럼 마우스 포인터가 요소 안쪽에서 바깥으로 나갈 때 발생mouseover
/ mouseout
과의 차이점mouseover/mouseout
을, 자식 요소에는 영향을 끼치지 않고 해당 요소에만 이벤트 핸들러를 다루고자 한다면 mouseenter/mouseleave
를 활용하기// showTitle 함수를 완성해 주세요
function showTitle(e) {
// 여기에 코드를 작성하세요
if (e.target.dataset.title) {
const span = document.createElement('span');
span.setAttribute('class', 'title'); // span.classList.add('title');
span.textContent = e.target.getAttribute('data-title') // span.textContent = e.target.dataset.title
e.target.append(span);
}
}
// removeTitle 함수를 완성해 주세요
function removeTitle(e) {
// 여기에 코드를 작성하세요
if (e.target.dataset.title) {
e.target.lastElementChild.remove();
}
}
// '대상'과 '타입'을 수정해 주세요
const map = document.querySelector('.map');
map.addEventListener('mouseover', showTitle);
map.addEventListener('mouseout', removeTitle);
KeyboardEvent.type
KeyboardEvent.key
: 이벤트가 발생한 버튼의 값 (사용자가 누른 키가 가지고 있는 값)KeyboardEvent.code
: 이벤트가 발생한 버튼의 키보드에서 물리적인 위치const chatBox = document.querySelector('#chat-box');
const input = document.querySelector('#input');
const send = document.querySelector('#send');
function sendMyText() {
const newMessage = input.value;
if (newMessage) {
const div = document.createElement('div');
div.classList.add('bubble', 'my-bubble');
div.innerText = newMessage;
chatBox.append(div);
} else {
alert('메시지를 입력하세요...');
}
input.value = '';
}
send.addEventListener('click', sendMyText);
// 여기에 코드를 작성하세요
input.addEventListener('keypress', function(e) {
if (e.keyCode === 13 && !e.shiftKey) {
e.preventDefault();
sendMyText();
}
});
const input = document.querySelector('#input');
function checker() {
const words = document.querySelectorAll('.word');
if (words.length === 0) {
alert('Success!👏');
if(confirm('retry?')) {
window.location.reload();
}
}
}
function deleteWord () {
const word = document.querySelector(`[data-word="${input.value}"]`);
if (!word) {
return;
}
word.remove();
checker();
input.value = '';
}
// 여기에 코드를 작성하세요
input.addEventListener("change", deleteWord)
scroll
이벤트는 보통 window
객체에 이벤트 핸들러를 등록하고 window
객체의 프로퍼티와 함께 자주 활용됨scrollY
프로퍼티를 활용하면 스크롤된 특정한 위치를 기준으로 이벤트 핸들러가 동작하게 하거나 혹은 스크롤 방향(위로 스크롤 중인지/아래로 스크롤 중인지)을 기준으로 이벤트 핸들러가 동작하게끔 활용할 수도 있음// Scroll 이벤트
let lastScrollY = 0;
function onSroll() {
const nav = document.querySelector('#nav');
const toTop = document.querySelector('#to-top');
const STANDARD = 30;
if (window.scrollY > STANDARD) { // 스크롤이 30px을 넘었을 때
nav.classList.add('shadow');
toTop.classList.add('show');
} else { // 스크롤이 30px을 넘지 않을 때
nav.classList.remove('shadow');
toTop.classList.remove('show');
}
if (window.scrollY > lastScrollY) { // 스크롤 방향이 아랫쪽 일 때
nav.classList.add('lift-up');
} else { // 스크롤 방향이 윗쪽 일 때
nav.classList.remove('lift-up');
}
lastScrollY = window.scrollY;
}
window.addEventListener('scroll', onSroll);