Javascript event
2022. 8. 31. 16:19ㆍJavaScript
이벤트 처리
- 사용자에 의해 감지되고 처리될 수 있는 동작이나 사건
- 키보드나 마우스 동작처럼 브라우저에서 발생하는 사건(순간)들
- 사용자가 발생시킬 수도 있고 응용프로그램이 발생시킬 수도 있음
- 이벤트 => click / dbclick / mouseover / load ...
- 이벤트핸들러 => onclock / ondbclick / onmouseover / onload ....
이벤트 종류
마우스 이벤트
- 키보드 이벤트
- 프레임 이벤트
- 프레임 이벤트
- 폼 이벤트
- 드래그 이벤트
- 클립보드 이벤트
- 프린트 이벤트
- 미디어 이벤트
- 요소에 이벤트를 바인딩하는 세가지 방법
1. html 이벤트 핸들러
- function 함수명 (){//처리코드;}
- < 태그 이벤트핸들러='함수();' >
function start(){
var img1 = document.getElementById('img1');
var cnt=1;
var des='';
function change(){
//cnt=Math.floor(Math.random()*4)+1; // 1~4
cnt++; // 1 2 3 4
if(cnt==5){
cnt=1;
}
if(cnt==1){
des = '이미지1 설명';
}else if(cnt==2){
des = '이미지2 설명';
}else if(cnt==3){
des = '이미지3 설명';
}else if(cnt==4){
des = '이미지4 설명';
}
img1.src='./gallery/images/img'+ cnt +'.jpg';
img1.alt=des;
}
setInterval(change , 3000);
}
//JS
<h3>5초마다 자동으로 바뀌는 이미지 광고(랜덤)-4컷</h3>
<div>
<img id="img1" src="./gallery/images/img1.jpg" alt="이미지 설명1">
</div>
<button onclick="start();">start</button>
//HTML
토글 알고리즘
ex)
1.홀짝
var cnt = 0;
var img1 = document.getElementById('img1');
var btn = document.getElementById('btn');
function start(){
cnt++;
if(cnt%2==1){
// img1.style.borderRadius = '50px';
// img1.style.boxShadow = '5px 5px 5px 0 rgba(0,0,0,.2)';
// img1.style.opacity ='1';
// img1.style.left = 0;
img1.className = 'img2';
btn.innerHTML = 'stop';
}else{
// img1.style.borderRadius = '';
// img1.style.boxShadow = '';
// img1.style.opacity = 0;
// img1.style.left = '600px';
img1.className ='img1';
btn.innerHTML = 'start';
}
}
2.가정법
var sp = false; // 가정법 flase(start) true(stop)
var img1 = document.getElementById('img1');
var btn = document.getElementById('btn');
function start(){
if(sp == false){
img1.className = 'img2';
btn.innerHTML = 'stop';
sp = true;
}else{
img1.className ='img1';
btn.innerHTML = 'start';
sp = false;
}
}
3. 가정법 이용 아코디언 메뉴
<style>
ul{
list-style: none;
}
ul li p:last-child{
height:0;
background: orange;
opacity: 0;
transition: all .3s ease-out;
}
ul li .answ:last-child{
height:100px;
opacity: 1;
}
</style>
<h2>아코디언 메뉴</h2>
<div class="box">
<ul>
<li>
<p><a href="#" id="btn" onclick="start();">안국남씨는 지금 무엇을 하고 계실까요? ▼</a></p>
<p id="answer">안국남씨는 약먹구 자구</p>
</li>
</ul>
<!-- <button id="btn" type="button" onclick="start();">start</button> -->
</div>
<script>
var sp = false; // 가정법 flase(닫혔을때) true(열렸을때)
var answer = document.getElementById('answer');
var btn = document.getElementById('btn');
function start(){
if(sp == false){
answer.className = 'answ';
btn.innerHTML = '안국남씨는 지금 무엇을 하고 계실까요? ▲';
sp = true;
}else{
answer.className = '';
btn.innerHTML = '안국남씨는 지금 무엇을 하고 계실까요? ▼';
sp = false;
}
}
4.form 태그를 이용해 로그인 창 만들기
<div id="page">
<h1>List King</h1>
<h2>New Account</h2>
<form method="post" action="">
<label for="username">Create a username: </label>
<input type="text" id="username" onblur="checkUsername()" />
<div id="feedback"></div>
<label for="password">Create a password: </label>
<input type="password" id="password" />
<input type="submit" value="sign up!" />
</form>
</div>
<script>
function checkUsername(){
var elMsg = document.getElementById('feedback');
var elUsername = document.getElementById('username');
if(elUsername.value.length < 5){
elMsg.textContent = 'Username must be 5 characters or more';
}else{
elMsg.textContent='';
}
}
</script>
2.DOM 이벤트 핸들러
이벤트 제거
1.객체.이벤트핸들러 = null;
2.return false;
객체.이벤트핸들러 = function(){
//처리코드;
}
function 함수명 (){
//처리코드;
}
객체.이벤트핸들러 = 함수명;
회원가입 예시
<form id="form" action="a.php" method="post">
<p>아이디 <input id="id" type="text" /></p>
<p>비밀번호 <input id="password" type="password" /></p>
<p>비밀번호 확인 <input id="password-check" type="password" /></p>
<p><input id="Submit1" type="submit" value="제출" /></p>
</form>
<script>
var form = document.getElementById('form');
var password = document.getElementById('password');
var check = document.getElementById('password-check');
form.onsubmit = function(){
if(password.value == check.value){
alert('확인되었습니다.')
} else{
alert('비밀번호를 다시 입력해주세요');
return false; //false 값을 return하면 이벤트가 제거되어 처리되지 않는다.
}
}
</script>
DOM 이벤트 리스너
- W3C에서 공식적으로 지정한 DOM Level 2 이벤트 모델
- 한 번에 여러 개의 이벤트 리스너 추가
- 이벤트 전달 방식 중 이벤트 캡처링 지원
- IE 9 버전부터 지원
* 객체.addEventListener('이벤트','functionName',false); 세번째 인수값 false는 생략 가능
매개변수가 없는 함수 호출
<input id="button" type="button" value="이벤트" />
<h5 id="heading">좋은 날</h5>
<script>
var button = document.getElementById('button');
var heading = document.getElementById('heading');
function whenClick1(){
heading.innerHTML ='행';
}
function whenClick2(){
heading.style.color = 'blue';
}
button.addEventListener('click',whenClick1);
button.addEventListener('click',whenClick2);
// button.removeEventListener('click',whenClick2)
매개변수가 존재하는 함수 호출법
<input id="button" type="button" value="이벤트" />
<h5 id="heading">좋은 날</h5>
<script>
var button = document.getElementById('button');
var heading = document.getElementById('heading');
function whenClick1(a){
heading.innerHTML = a;
}
function whenClick2(b){
heading.style.color = b;
}
button.addEventListener('click', function(){whenClick1('우울한날')});
button.addEventListener('click', function(){whenClick2('#ccc')});
// button.removeEventListener('click',whenClick2)
</script>
회원가입 예시 addEventListener 변경
<div id="page">
<h1>List King</h1>
<h2>New Account</h2>
<form method="post" action="">
<label for="username">Create a username: </label>
<input type="text" id="username"/>
<div id="feedback"></div>
<label for="password">Create a password: </label>
<input type="password" id="password" />
<input type="submit" value="sign up!" />
</form>
</div>
<script>
function checkUsername() {
var elMsg = document.getElementById('feedback');
if (this.value.length < 5) {
elMsg.textContent = 'Username must be 5 characters or more';
} else {
elMsg.textContent = '';
}
}
var elUsername = document.getElementById('username');
elUsername.addEventListener('blur', checkUsername, false);
</script>
객체.preventDefault(); => a 태그를 눌러도 페이지 이동을 하지 않게 하는경우
var tab1 = document.getElementById('tab1');
tab1.onclick = function(e){
e.preventDefault();
}
자바스크립트 기업형 사이트 자바스크립트 활용문
팝업창 호출하기
<div id="content">
<a href="#" onclick="openLayer('layerPop1',100,100);"><img style="cursor:pointer;" src="images/a1.jpg" alt="확대이미지" /></a>
<a href="#" onclick="openLayer('layerPop2',100,100)"><img style="cursor:pointer;" src="images/b1.jpg" alt="확대이미지" /></a>
</div>
<div id="layerPop1" style="position:absolute;width:514px; height:345px; display:none;">
<a href="#" class="close" onclick="closeLayer('layerPop1');"><img style="cursor:pointer;" src="images/a2.jpg" /></a>
</div>
<div id="layerPop2" style="position:absolute;width:611px; height:400px; display:none;">
<a href="#" class="close" onclick="closeLayer('layerPop2')"><img style="cursor:pointer;" src="images/b2.jpg" /></a>
</div>
<script>
var cnt = 0; // popup 창에 하나도 안떠있다면 0 , 하나가 떠있다면 1
function openLayer(idname, tpos, lpos){
if(cnt==0){
cnt = 1;
var pop = document.getElementById(idname);
pop.style.display = 'block';
pop.style.top = tpos + 'px';
pop.style.left = lpos + 'px';
}
}
function closeLayer(idname){
var pop = document.getElementById(idname);
pop.style.display = 'none';
cnt = 0;
}
</script>
지도 서브 탭 메뉴
<style>
a{text-decoration: none; color:#333;}
*{margin:0; padding:0}
.tab ul{list-style: none; overflow: hidden;}
.tab li{float:left; margin-right:30px; width:150px;}
.tab a{display: block; padding:20px 0; text-align: center; font-size: 20px;}
.tab .tabcontent{margin-top: 20px;}
.tab .tabcontent div{width:600px; height:200px; background: #fa0; display: none;}
.current{background: #fa0; color:#fff;}
</style>
<div class="tab">
<ul>
<li><a id="tab1" href="#">tab1</a></li>
<li><a id="tab2" href="#">tab2</a></li>
<li><a id="tab3" href="#">tab3</a></li>
</ul>
<div class="tabcontent">
<div id="con1">탭1내용</div>
<div id="con2">탭2내용</div>
<div id="con3">탭3내용</div>
</div>
</div>
<script>
var tab1 = document.getElementById('tab1');
var tab2 = document.getElementById('tab2');
var tab3 = document.getElementById('tab3');
var con1 = document.getElementById('con1');
var con2 = document.getElementById('con2');
var con3 = document.getElementById('con3');
tab1.onclick = function(e){
e.preventDefault();
this.className = 'current';
tab2.className = '';
tab3.className = '';
con1.style.display = 'block';
con2.style.display = 'none';
con3.style.display = 'none';
}
tab2.onclick = function(e){
e.preventDefault();
tab1.className = '';
this.className = 'current';
tab3.className = '';
con1.style.display = 'none';
con2.style.display = 'block';
con3.style.display = 'none';
}
tab3.onclick = function(e){
e.preventDefault();
tab1.className = '';
tab2.className = '';
this.className = 'current';
con1.style.display = 'none';
con2.style.display = 'none';
con3.style.display = 'block';
}
갤러리 제작
1. 통 이미지
<style>
*{margin:0; padding:0;}
img{border:0;}
.gallery{width:400px; padding:10px; overflow:hidden; border:2px solid #CCC;}
.gallery ul{list-style:none; margin-top:10px;}
.gallery ul li{float:left;}
.gallery ul li img{ cursor:pointer;}
</style>
</head>
<body>
<div class="gallery">
<img id="image" src="images/img1.jpg" alt="단풍이미지" />
<ul>
<li><a href="#" id="img1"><img src="images/img1.jpg" width="100" height="80" alt="단풍이미지1"></a></li>
<li><a href="#" id="img2"><img src="images/img2.jpg" width="100" height="80" alt="단풍이미지2"></a></li>
<li><a href="#" id="img3"><img src="images/img3.jpg" width="100" height="80" alt="단풍이미지3"></a></li>
<li><a href="#" id="img4"><img src="images/img4.jpg" width="100" height="80" alt="단풍이미지4"></a></li>
</ul>
</div>
<script>
var image = document.getElementById('image');
var img1 = document.getElementById('img1');
var img2 = document.getElementById('img2');
var img3 = document.getElementById('img3');
var img4 = document.getElementById('img4');
img1.onclick = function(){
image.src = "images/img1.jpg";
}
img2.onclick = function(){
image.src = "images/img2.jpg";
}
img3.onclick = function(){
image.src = "images/img3.jpg";
}
img4.onclick = function(){
image.src = "images/img4.jpg";
}
</script>
2. 백그라운드 이미지
<style>
*{margin:0; padding:0;}
img{border:0;}
.gallery{width:400px; padding:10px; overflow:hidden; border:2px solid #CCC;}
.gallery #image{width:400px; height:300px; background:url(images/img1.jpg) 0 0 no-repeat;}
.gallery ul{list-style:none; margin-top:10px;}
.gallery ul li{float:left;}
.gallery ul li img{ cursor:pointer;}
</style>
<body>
<div class="gallery">
<div id="image"></div>
<ul>
<li><a href="#" id="img1"><img src="images/img1.jpg" width="100" height="80" alt="단풍이미지1"></a></li>
<li><a href="#" id="img2"><img src="images/img2.jpg" width="100" height="80" alt="단풍이미지2"></a></li>
<li><a href="#" id="img3"><img src="images/img3.jpg" width="100" height="80" alt="단풍이미지3"></a></li>
<li><a href="#" id="img4"><img src="images/img4.jpg" width="100" height="80" alt="단풍이미지4"></a></li>
</ul>
<script>
var image = document.getElementById('image');
var img1 = document.getElementById('img1');
var img2 = document.getElementById('img2');
var img3 = document.getElementById('img3');
var img4 = document.getElementById('img4');
img1.onclick = function(){
image.style.background = 'url(images/img1.jpg)';
}
img2.onclick = function(){
image.style.background = 'url(images/img2.jpg)';
}
img3.onclick = function(){
image.style.background = 'url(images/img3.jpg)';
}
img4.onclick = function(){
image.style.background = 'url(images/img4.jpg)';
}
</script>
3. 백그라운드 이미지 html 에서 함수호출하기
<style>
*{margin:0; padding:0;}
img{border:0;}
.gallery{width:400px; padding:10px; overflow:hidden; border:2px solid #CCC;}
.gallery #image{width:400px; height:300px; background:url(images/img1.jpg) 0 0 no-repeat;}
.gallery ul{list-style:none; margin-top:10px;}
.gallery ul li{float:left;}
.gallery ul li img{ cursor:pointer;}
</style>
<body>
<div class="gallery">
<div id="image"></div>
<ul>
<li><a href="#" id="img1" onclick="changeGallery(1);"><img src="images/img1.jpg" width="100" height="80" alt="단풍이미지1"></a></li>
<li><a href="#" id="img2" onclick="changeGallery(2);"><img src="images/img2.jpg" width="100" height="80" alt="단풍이미지2"></a></li>
<li><a href="#" id="img3" onclick="changeGallery(3);"><img src="images/img3.jpg" width="100" height="80" alt="단풍이미지3"></a></li>
<li><a href="#" id="img4" onclick="changeGallery(4);"><img src="images/img4.jpg" width="100" height="80" alt="단풍이미지4"></a></li>
</ul>
</div>
<script>
function changeGallery(count){
var image = document.getElementById('image');
image.style.background = 'url(images/img'+ count +'.jpg';
image.onclick = this;
}
</script>
'JavaScript' 카테고리의 다른 글
| Vanila JS Tab menu ex (0) | 2022.09.02 |
|---|---|
| Vanila JS class add/remove (0) | 2022.09.02 |
| Javascript window 객체 (0) | 2022.08.30 |
| Javascript object (0) | 2022.08.29 |
| Javascript function (0) | 2022.08.22 |