마우스 이벤트 종류
- mousedown/mouseup : 요소 위에서 마우스 왼쪽 버튼을 누를 때, 마우스버튼을 누르고 있다가 뗄 때
- mouseover/mouseout : 마우스 커서가 요소 바깥에 있다가 요소 안으로 움직일 때, 커서가 요소 위에 있다가 요소 밖으로 움직일 때
- mousemove : 마우스를 움직일 때
- click : 마우스 왼쪽 버튼을 사용해 동일한 요소 위에서 mousedown 이벤트와 mouseup 이벤트를 연달아 발생시킬 때
- contextmenu : 마우스 오른쪽 버튼을 눌렀을 때
<div id="area1" class="area"></div>
<script>
let btn1 = document.querySelector("#btn1");
let area1 = document.querySelector("#area1");
btn1.onmousedown = (event) => area1.insertAdjacentHTML('beforeend', 'mousedown button=' + event.button + "<br>");
btn1.onmouseup = (event) => area1.insertAdjacentHTML('beforeend', 'mouseup button=' + event.button + "<br>");
btn1.onclick = (event) => area1.insertAdjacentHTML('beforeend', 'click button=' + event.button + "<br>");
btn1.oncontextmenu = (event) => area1.insertAdjacentHTML('beforeend', 'contextmenu button=' + event.button + "<br>");
btn1.ondblclick = (event) => area1.insertAdjacentHTML('beforeend', 'dblclick button=' + event.button + "<br>");
</script>
- 마우스 왼쪽 : 0

- 마우스 오른쪽 : 2

- 휠(가운데) 클릭 : 1

- 마지막 더블클릭까지 확인됨

마우스 이벤트 좌표
클라이언트 좌표(clientX, clientY)
: 웹 문서를 기준으로 각각 왼쪽에서 얼마나 떨어져 있는지, 위에서 얼마나 떨어져 있는지
<script>
let span1 = document.querySelector("#span1");
span1.onmouseover = () => span1.innerHTML = event.clientX + ":" + event.clientY;
</script>
마우스를 올려보세요 부분에 올리면 좌표가 표시된다.


선택 막기, 복사 막기
글씨 선택 막기 : mousedown 이벤트가 발생할 때 나타나는 브라우저 기본 동작 막기
글씨 복사 막기 : oncopy 이벤트 기본 동작 막기
<span ondblclick="alert('클릭되었습니다');" onmousedown="return false;">
이 영역은 더블 클릭해도 선택되지 않도록 합니다
</span>

<div oncopy="alert('복사 불가능입니다!'); return false;">
이 편지는 영국에서 최초로 시작되어 일년에 한 바퀴 돌면서
받는 사람에게 행운을 주었고 당신에게로 옮겨진 이 편지는
4일 안에 당신 곁을 떠나야 합니다. 이 편지를 포함해서 7통을
행운이 필요한 사람에게 보내 주셔야 합니다.
</div>

키보드 이벤트 종류
- keydown : 키를 누를 때
- keyup : 키를 놓을 때
키보드 이벤트 테스트
<input type="text" id="content" placeholder="아무 키나 입력하세요">
event.key : 문자
event.code : 물리적인 키 코드
Ex. 소문자 a를 입력하면 event.key=a event.code=keyA
대문자 A를 입력하면 event.key=A event.code=keyA
<div id="area1" class="area"></div>
<script>
let content = document.querySelector("#content");
let area1 = document.querySelector('#area1');
content.onkeydown = () => area1.insertAdjacentHTML('beforeend', 'keydown event.key=' + event.key + ", event.code=" + event.code + "<br>");
content.onkeyup = () => area1.insertAdjacentHTML('beforeend', 'keyup event.key=' + event.key + ", event.code=" + event.code + "<br>");
</script>

전화번호 입력 받기
<input type="tel" placeholder="전화번호를 입력하세요"
onkeydown="return checkPhoneNumber(event.key)">
<script>
function checkPhoneNumber(key){
return (key >= '0' && key <= '9') || key == '-' ||
key == 'ArrowLeft' || key == 'ArrowRight' ||
key == 'Delete' || key == 'Backspace';
}
</script>

스크롤 이벤트
마우스의 스크롤을 움직였을 때 발생하는 이벤트로 컨텐츠 내용 더보기 등에 사용할 수 있음
element.scrollHeight : 요소 스크롤 뷰 높이
element.scrollTop : 요소 세로 스크롤 위치
element.scrollLeft : 요소 왼쪽 스크롤 위치
element.clientHeight : 요소 안쪽 높이
스타일 지정
.imageArea{
margin : 20px;
border: 2px solid lightgray;
height : 200px;
overflow-y : scroll;
}
<div class="imageArea"></div>
<script>
// 추가할 이미지 목록
let imageArr = ['pikachu.png', 'pikachu2.png', 'pikachu3.jpg'];
//div영역
let imageArea = document.querySelector(".imageArea");
let index = 0;
//문서 로드시 이미지 추가
addImage(imageArr[index]);
//fileName 전달 받아 해당 이미지를 div에 추가하는 함수
function addImage(fileName){
let html = '';
for(let i = 0; i < 36; i++){
html += "<img src='../resources/images/" + fileName + "' width='100' height='100'>"
}
imageArea.innerHTML += html;
}
</script>
36개의 피카추사진이 36장으로 나오고,
정해진 크기가 넘어가서 스크롤바가 생겼다.

imageArea.addEventListener('scroll', function(){
console.log("imageArea 높이 : " + imageArea.clientHeight);
console.log("imageArea 스크롤 위치 : " + imageArea.scrollTop);
console.log("imageArea 스크롤 높이 : " + imageArea.scrollHeight);
//스크롤바를 가장 끝까지 내렸을 때
//스크롤 위치 + 요소 높이 == 스크롤 높이
if(imageArea.scrollTop + imageArea.clientHeight == imageArea.scrollHeight){
index = ++index < imageArr.length ? index : index - imageArr.length;
addImage(imageArr[index]);
}
});
// 스크롤 이벤트
imageArea.addEventListener('scroll', function(){
console.log("imageArea 높이 : " + imageArea.clientHeight);
console.log("imageArea 스크롤 위치 : " + imageArea.scrollTop);
console.log("imageArea 스크롤 높이 : " + imageArea.scrollHeight);
// 스크롤바를 가장 끝까지 내렸을 떄
// 스크롤 위치 + 요소 높이 == 스크롤 높이
if(imageArea.scrollTop + imageArea.clientHeight == imageArea.scrollHeight) {
index = ++index < imageArr.length ? index : index - imageArr.length;
addImage(imageArr[index]);
}
});
다른 종류의 이미지 2개가 무한대로 스크롤을 내릴때마다 나온다.

'TIL > JavaScript' 카테고리의 다른 글
[JavaScript] 정규표현식 (0) | 2022.02.23 |
---|---|
[JavaScript] 폼 이벤트 (0) | 2022.02.23 |
[JavaScript] 이벤트 (0) | 2022.02.21 |
[JavaScript] BOM(Browser Object Model) (0) | 2022.02.21 |
[JavaScript] 문서 수정 (0) | 2022.02.21 |