Frontend - JavaScript(2)
이벤트란?
웹 브라우저가 알려주는 html요소의 이벤트의 발생을 의미한다.
자바스크립트는 이벤트에 반응하여 특정 동작을 수행할 수 있다.
자바스크립트를 비동기식 이벤트 중심의 프로그래밍 모델이라고한다
이벤트 리스너
이벤트가 발생했을때 그 처리를 담당하는 함수를 가르킨다 이벤트 핸들러라고 한다
지정된 타입의 이벤트가 특정 요소에서 발생하면, 웹 브라우저는 그 요소에 등록된 이벤트 리스너를 실행 시킨다.
메소드에 이벤트 리스너를 전달하는 방법
대상객체.addEventListener("이벤트명", 실행할 이벤트 리스너)
- 글자 위에 마우스를 올리면 배경색이 변경되는 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
let p;
function init() {// 문서가 완전히 로드되었을때 호출
p = document.getElementById("p")
//p라는 자바스크립트 변수에 p태그 요소 할당
p.addEventListener("mouseover", over) // 이벤트 리스너 등록
p.addEventListener("mouseout", out) //이벤트 리스너 등록
}
function over() {
p.style.backgroundColor = "orchid";
}
function out() {
p.style.backgroundColor = "white";
}
</script>
</head>
<body onload="init()">
<p id="p">마우스 올리면 orchid 색으로 변경</p>
</body>
</html>
위에서 over,out을 함수를 따로 설정했지만 익명함수를 통해서 설정하지 않고 사용할 수 있다.
- 익명함수를 사용한 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
let p;
function init() {// 문서가 완전히 로드되었을때 호출
p = document.getElementById("p")
//p라는 자바스크립트 변수에 p태그 요소 할당
p.addEventListener("mouseover", function() {
this.style.backgroundColor = "orchid";
}) // 이벤트 리스너 등록
p.addEventListener("mouseout", function() {
this.style.backgroundColor = "white";
}) //이벤트 리스너 등록
}
</script>
</head>
<body onload="init()">
<p id="p">마우스 올리면 orchid 색으로 변경</p>
</body>
</html>
위의 예제와 똑같이 작동한다
- confirm을 이용해서 페이지 이동
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
function query() {
let ret = confirm("네이버로 이동 하시겠습니까?");
//confirm은 예,아니오를 선택하는 창이 나온다
return ret; // true나 false가 리턴된다
}
function noAction(e1){
e1.preventDefault(); // 이벤트의 디폴트 행동 강제취소
}
</script>
</head>
<body>
<a href="http://www.naver.com" onclick="return query()">네이버로 이동 </a>
<br>
<form>
<input type="checkbox">빵 (체크됨)<br>
<input type="checkbox" onclick="noAction(event)">술(체크안됨)
</form>
</body>
</html>
onclick 함수에도 return을 적어줘야한다 그렇지 않으면 취소를 눌러도 페이지 이동을 한다
마우스 이벤트
- 마우스를 이용한 이벤트 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
let width=1; // 테두리 두께
function down(obj) { //클릭한다면
obj.style.fontStyle = "italic";
}
function up(obj){ // 클릭을뗐다면
obj.style.fontStyle = "normal";
}
function over(obj) { //마우스를 올려놨다면
obj.style.borderColor = "violet";
}
function out(obj) { // 마우스를 밖으로 벗어난다면
obj.style.borderColor = "lightgray";
}
function wheel(e, obj) { // e는 이벤트 객체, obj=span
if(e.wheelDelta < 0) { // 휠을 아래로 굴릴 때
width--; // 폭 1 감소
if(width < 0) width = 0; // 폭이 0보다 작아지지 않게
}
else // 휠을 위로 굴릴 때
width++; // 폭 1 증가
obj.style.borderStyle = "ridge";
obj.style.borderWidth = width+"px";
}
</script>
</head>
<body>
<div>마우스 관련
<span onmousedown="down(this)"
onmouseup = "up(this)"
onmouseover="over(this)"
onmouseout="out(this)"
onwheel="wheel(event,this)"
style="display:inline-block">이벤트</span>가 발생합니다
</div>
</body>
</html>
마우스를 클릭했을때는 글씨체가 변하고 마우스 휠을 돌리면 borderwidth가 늘어나고 스타일이 바뀐다 다시 반대로 돌리면 borderwidth가 작아진다
- 이미지 크기가 나타나는 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.6.0.js">
</script>
<script>
function changeImage() {
let sel = document.getElementById("sel");
let img = document.getElementById("myImg");
img.onload = function (){
let mySpan = document.getElementById("mySpan")
mySpan.innerHTML = img.width + "x" + img.height;
}
let index = sel.selectedIndex;
img.src = sel.options[index].value;
}
</script>
</style>
</head><body onload="changeImage()">
<form>
<select id="sel" onchange="changeImage()">
<option value="chaewon.jpg">이미지
<option value="chaewon1.jpg">이미지1
</select>
<span id="mySpan">이미지 크기</span>
</form>
<p><img id="myImg" src="chaewon,jpg" alt=","></p>
</body>
</html>
선택한 이미지의 크기가 나온다
- 라디오 버튼의 값 전달
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.6.0.js">
</script>
<script>
function findChecked(){
let found = null;
let kcity = document.getElementsByName("city");
for(let i = 0; i<kcity.length; i++){
if(kcity[i].checked == true)
found = kcity[i];
}
if(found != null){
alert(found.value + "이 선택되었음");
}
else{
alert("선택된것이 없음")
}
}
</script>
</head><body>
<form>
<input type="radio" name="city" value="서울" checked>서울
<input type="radio" name="city" value="busan">부산
<input type="radio" name="city" value="chunchen">춘천
<input type="button" value="find checked" onclick="findChecked()">
</form>
</body>
</html>
city라는 이름의 라디오 버튼 요소들의 값을 넣을 kcity를 선언하고 for문을 이용해서 kcity의 checked가 true인값을 찾아서 found에 넣는다 alert를 이용해 found의 값을 출력한다
- 체크 박스 계산기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.6.0.js">
</script>
<script>
let sum = 0;
function calc(cBox){
if(cBox.checked)
sum += parseInt(cBox.value);
else
sum -= parseInt(cBox.value);
document.getElementById("sumtext").value = sum;
}
</script>
</head><body>
<form>
<input type="checkbox" name="hap" value="10000" onclick="calc(this)">모자 1만원
<input type="checkbox" name="hap" value="30000" onclick="calc(this)">구두 3만원
<input type="checkbox" name="hap" value="80000" onclick="calc(this)">명품가방 8만원<br>
지불하실 금액 <input type="text" id="sumtext" value="0">
</form>
</body>
</html>
- 체크박스를 선택하면 onClick이 실행되면서 calc(this)함수가 실행된다 여기서 디스는 value의 값이 들어간다
- if문으로 체크가 설정되어 있으면 sum 변수에 값이 합해지거나 빼지고 sumtext 텍스트 상자에 값이 들어간다
// setTimeout & clearTimeout
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>setTimeout()으로 웹 페이지 자동 연결</title>
</head>
<body>
<h3>이미지에 마우스를 올리고 5초간 그대로 있을 때 사이트로 이동합니다</h3>
<hr>
<img id="img" src="chaewon.jpg"
onmouseover="startTimer(5000)"
onmouseout="cancelTimer()">
<script>
let timerID=null;
function startTimer(time) {
// 타이머 시작, setTimeout(수행할 함수,밀리초)
timerID = setTimeout("load('http://www.naver.com')", time);
// 툴팁 메시지
document.getElementById("img").title = "타이머 작동 시작...";
}
function cancelTimer() {
if(timerID !=null)
clearTimeout(timerID); // 타이머 reset
}
function load(url) {
window.location = url; // 현재 윈도우에 url 사이트 로드
}
</script>
</body>
</html>
- 이미지위에 사진을 올려놓으면 settimeout메소드실행되서 url를 불러온다
- 이미지 밖으로 나가면 타이머가 reset된다
- 텍스트가 자동회전하는 메소드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.6.0.js">
</script>
</head><body>
<div><span id="span" style="background-color:yellow">
자동회전하는 텍스트 입니다
</span></div>
<script>
let span = document.getElementById("span");
let timerID = setInterval("doRotate()",200);
// 200밀리초 주기로 dorotate()호출 구동된 메소드를 담고있다 함수형 변수
span.onclick = function (e) {
clearInterval(timerID);
}
function doRotate(){
let str = span.innerHTML;
let firstChar = str.substr(0,1)//제일앞에 한글자 가져오기
let remains = str.substr(1, str.length-1); // 한글자 제외한 나머지 담기
str = remains + firstChar;
span.innerHTML = str;
}
</script>
</body>
</html>
- dorotate는 제일앞에 한글자를 가져오고 나머지 뒤에 글자에 붙이는 방식을 반복적으로 실행한다
- 글자를 클릭했을때는 타이머를 초기화한다
Author And Source
이 문제에 관하여(Frontend - JavaScript(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jinwoo2025/Frontend-JavaScript2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)