- JavaScript-5일차2023년 11월 23일 12시 14분 52초에 업로드 된 글입니다.작성자: 삶은고구마
클로져,구조분해할당 과제 리뷰 完
prototype:예전타입
class: prototype을 개선
목차
19.WINDOW객체
20.BOM(Browser Object Model)
21.EVENT처리
19.WINDOW객체
window
-브라우저 최상위 객체
-탭 별로 하나씩 존재한다.
-BOM: Browser Object Model - navigator,history,screen..
-DOM: Document Object Model - document(내가 만든 html문서)
-Javascript object(객체)
-등등..
open
-새 창(탭/팝업)을 여는 함수.
-새 창의 window 객체를 반환. 해당 창에 대한 제어 가능.
const newWindow = open ("01_hellojs.html",'hellojs','width=500,height=300,top=400,left=400'); //("01_hellojs.html",'_self'); //현재 창에서 열기
Time API - setTimeout
-제공한 mills초 후에 callback 함수 실행.
-js의 시간은 스레드 스케쥴링에 의해서 늘어질 수 있다.
[실제로 콘솔창을 확인----원하는 때에 출력되지 않은 적이 있었다.]
-timeoutId : 타이머를 실행할 때마다 랜덤으로 부여 되는 id (타이머 중지 가능)
//1초뒤 실행 const timeoutId = setTimeout(() =>{ alert('😎😎😎🤣'); },1000); console.log(timeoutId); //타이머 실행할때마다 랜덤으로 부여되는 id
setInterval(callbackFunction,mills)
-mills초 후에 callbackFunction을 실행
-mills초 간격으로 callbackFunction을 실행
-clearInterval(id)로 취소하기 전까지..
let intervalId; const test4 = () =>{ let i=1; intervalId = setInterval(()=>{ console.log(i++); },1000); console.log(intervalId,'번 인터벌이 등록되었습니다..'); }
타이머 예제 - 초시계
/** * 초시계 만들어보기 */ const clock = () =>{ const d = new Date(); //두자리수로 포맷 맞추기 const f = (n) =>n<10?'0'+n: n; //앞은 string,뒤는 number //그냥 getHour이렇게 쓰면 숫자 형식으로 반환되어서 10미만 한자리면 하나만 출력됨 const hh = f(d.getHours()); const mm = f(d.getMinutes()); const ss = f(d.getSeconds()); console.log(`${hh}:${mm}:${ss}`); return `${hh}:${mm}:${ss}`; }; //계속 inerval 실행되어도 괜찮음 ㅇㅇ const displayclock = () => document.querySelector("#clock-display").innerHTML = clock(); displayclock(); setInterval(displayclock,1000);
20.BOM(Browser Object Model)
navigator
-브라우저(항해사)정보 제공 객체
const test1 = () => { console.log(navigator); console.log(navigator.userAgent);//브라우저 판단 }
location
-주소창과 관련된 기능 제공
console.log(location) 현재 로케이션 정보 확인 가능
hostname,port 등등location.href="주소"; 해당 주소로 이동 location.reload(); 페이지 새로고침 history
-방문기록 관련 기능 제공
-뒤로가기,앞으로가기,새로고침..
screen
-브라우저가 실행중인 모니터(주모니터 기준)에 대한 정보 제공
height 모니터 높이 px width 모니터 너비 px availHeight 가용 높이 availWidth 가용 너비 availLeft 가용 offset(왼) availTop 가용 offest(위) //모니터 사이즈 측정 후 한 정확히 한 가운데에 팝업창 띄우는 예제 const width=500; //팝업창 너비 const height=300; //팝업창 높이 const left=(screen.width-width)/2 + screen.availLeft; const top=(screen.height-height)/2 + screen.availTop; const popUp = open("","",`width=${width},height=${height},top=${top},left=${left}`);
21.EVENT처리
event란?
-inline이벤트 속성의 작성내용이 미리 만들어진 핸들러 함수 안에서 실행되는 것
onclick addEventListener 하나만 등록 가능 여러개 등록 가능 한 객체에 대한 onclick 이벤트가 여러개 있다면
가장 마지막에 선언된 것으로 실행됨한 객체에 대한 핸들러가 여러개 있다면 모두 실행됨
[각 다른 아이콘,텍스트 출력시 모두 출력]event 객체
-type
-target:이벤트 발생 객체
-각종 좌표..
event로 작성 document.querySelector("#btn4").onclick = function(e) { console.log(e); console.log(e.target);//타겟의 속성에 접근 가능하다! console.log(e.target.innerHTML); //this용법6. 이벤트 핸들러(일반함수) 안의 this는 //이벤트 "발생 객체"를 가르킨다. //화살표함수면 부모의 this를 가르키게 되어서 즉, window가 나오게됨 console.log(this); console.log(this===e.target); //true } //포커스 맞춰짐 document.querySelector("#nickname").onfocus = (e) => { console.log("#nickname 포커싱 되었습니다."); } //포커스 잃음 document.querySelector("#nickname").onblur = (e) => { console.log("#nickname 포커스를 잃었습니다.."); //const value = e.target.value;//객체 const {target:{value}} = e; //구조분해할당ver console.log(value); if(!value) { alert('별칭은 필수 입니다!!'); } }
key 관련 이벤트
keydown 입력값 확인 불가 keypress 한글 확인 불가 keyup 위와 같은 이슈로
주로 keyup 사용//text type input에 엔터를 입력할 시 팝업창이 뜨는 예제 document.querySelector("#memo").onkeyup = (e) =>{ console.log(e);// key(a) | keyCode(65) | code(keyA) console.log(e.target.value); //엔터확인 if(e.keyCode==13) alert(e.target.value); };
★제출방지
1.제출 버튼 클릭
2.submit 이벤트 발생
3.submit 이벤트 핸들러(유효성 검사) 호출
----유효성 검사에서 막힐시 제출 방지-----
4.기준을 통과했다면 실제 제출
서버단이나 다른 페이지 ,함수 간의 데이터 전달시 유효한 값을 다루는 것이 중요하다.
event.preventDefault();
//제출 버튼을 눌렀을때 아이디,비밀번호의 유효성을 검사하여 //유효한 데이터가 될때까지 제출을 막는 예제 document.signupFrm.onsubmit=(e)=>{ console.log('submit'); console.log(frm); // console.log(frm,username,password,confirmPassword); //아이디 검사(4글자 이상) if(username.value.length<4) { alert('아이디는 4글자 이상이여야 합니다..'); e.preventDefault(); return; } //비밀번호검사 (4글자 이상) if(password.value.length<4) { alert('비밀번호는 4글자 이상이여야 합니다..'); e.preventDefault(); return; } //비밀번호 일치 여부 검사 // if(confirmPassword.value !== password.value) // { // alert('두 비밀번호가 일치하지 않습니다.'); // e.preventDefault(); // return; // } if(notEqualPasswords()) { e.preventDefault(); return; } }; //blur 이벤트 핸들러 바인딩 //만약 notEqualPasswords()라고 하면 return값인 true or false가 들어오므로 주의 confirmPassword.onblur = notEqualPasswords; const requestSignup=()=>{ console.log('폼 제출 성공~~~~~~~~~~~~'); //signupFrm의 내용출력/초기화 //hongg/1234 회원가입을 요청했습니다. console.log(`${username.value}/${password.value} 회원가입을 요청했습니다.`); // username.value=''; // password.value=''; // confirmPassword.value=''; frm.reset(); //폼 리셋 };
임의의 이벤트 생성
버튼5를 클릭했을 때, 버튼1의 클릭핸들러 호출하기
document.querySelector('#btn5').onclick = () =>{ //1.click메소드 호출 //document.querySelector('#btn1').click(); //2.이벤트 객체전송 const event = new MouseEvent('click'); document.querySelector('#btn1').dispatchEvent(event); };
bubble
-이벤트 전파 : Event propagation
-bubbling : 자식객체에서 발생한 이벤트는 부모 객체로 전파 된다.
거품이 퍼져나가는걸 연상하기
이벤트가 전파되는걸 원치 않을때 중지도 가능하다. : e.stopPropagation();
//bubble /** * 이벤트 전파 Event Propagation * -bubbling:자식객체에서 발생한 이벤트는 부모 객체로 전파됨. * 맨 안의 자식객체인 3을 누르면 3-2-1로 퍼져나간다. * div의 부모인 body까지도 퍼져나갈수있지만 이벤트를 따로 주지않아 보이지않음. */ // document.querySelector("#bubble1").onclick = (e) =>{ // console.log('#bubble1',e); // }; // document.querySelector("#bubble2").onclick = (e) =>{ // console.log('#bubble2',e); // //이벤트가 전파되는걸 원치 않을 때 전파 중지 가능 // e.stopPropagation(); // }; // document.querySelector("#bubble3").onclick = (e) =>{ // console.log('#bubble3',e); // }; //하나의 핸들러로 여러 이벤트 관리 //부모 bubble1-2-3 자식 document.querySelector("#bubble1").onclick = (e) =>{ switch(e.target.id) { case 'bubble1':console.log("#bubble1");break; case 'bubble2':console.log("#bubble2");break; case 'bubble3':console.log("#bubble3");break; } };
이벤트 버블링에 관한 설명 및 예제 문서
https://ko.javascript.info/bubbling-and-capturing
'공부 > front-end' 카테고리의 다른 글
HTML 5API -1일차 (0) 2023.11.29 1128 Javascript 5일차 (1) 2023.11.28 Javascript-1일차 (0) 2023.11.17 HTML-2일차(CSS) (0) 2023.11.15 HTML-2일차 (0) 2023.11.14 다음글이 없습니다.이전글이 없습니다.댓글