<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1 id="title">안녕하세요.</h1>
<h2 id="content">연습입니다.</h2>
<script>
document.getElementById("title").innerHTML = "안녕"; // title을 안녕으로 변경
document.getElementById("content").style.fontSize = "16px"; // 본문의 폰트 사이즈를 16px로 변경
</script>
</body>
</html>
주석 :
//
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<div class="alert-box" id="alert">
알림창
<button
onclick="document.getElementById('alert').style.display = 'block';
"
>
버튼
</button>
<button onclick="document.getElementById('alert').style.display='none';">
닫기
</button>
</div>
</body>
</html>
- HTML / CSS로 미리 디자인한다.
- 조건을 넣어 필요할 때만 보이도록 조정한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<div class="alert-box" id="alert">
알림창
<button onclick="closeAlert()">닫기</button>
</div>
<button onclick="openAlert()">버튼</button>
<script>
function openAlert() {
document.getElementById("alert").style.display = "block";
}
function closeAlert() {
document.getElementById("alert").style.display = "none";
}
</script>
</body>
</html>
- 자바스크립트는 함수 작명시 camelCase 방식으로 짓는다. (openAlert)
- 조작할 HTML의 하단에 script 코드를 짜야한다.
- 셀렉터 오타를 주의한다. (개발자 도구에서 디버깅)
- 기본 문법 오타를 주의한다. (대소문자)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<div class="alert-box" id="alert">
알림창
<button onclick="controlAlert('none');">닫기</button>
</div>
<button onclick="controlAlert('block','아이디를 입력하세요.');">
버튼1
</button>
<button onclick="controlAlert('block','비번을 입력하세요.');">버튼2</button>
<script>
function controlAlert(para, str) { // 여러 인자가 가능
document.getElementById("alert").style.display = para;
document.getElementById("alert").innerHTML = str;
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<div class="alert-box" id="alert">
<p>알림창</p>
<button id="close">닫기</button>
</div>
<button onclick="controlAlert('block','아이디를 입력하세요.');">
버튼1
</button>
<button onclick="controlAlert('block','비번을 입력하세요.');">버튼2</button>
<script>
document.getElementById("close").addEventListener("click", function () {
document.getElementById("alert").style.display = "none";
});
function controlAlert(para, str) {
document.getElementsByClassName("p")[0] = str;
document.getElementById("alert").style.display = para;
}
</script>
</body>
</html>
- 클래스 명으로 찾을 수도 있다.
- ex) document.getElementsByClassName('클래스명')[인덱스]
- addEventListener(
'다양한 명령어가 있음'
,function() 콜백함수
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-light bg-light">
<div class="container-fluid">
<span class="navbar-brand">Navbar</span>
<button class="navbar-toggler" type="button">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
<ul class="list-group">
<li class="list-group-item">An item</li>
<li class="list-group-item">A second item</li>
<li class="list-group-item">A third item</li>
<li class="list-group-item">A fourth item</li>
<li class="list-group-item">And a fifth one</li>
</ul>
<script>
document
.getElementsByClassName("navbar-toggler")[0]
.addEventListener("click", function () { // 클릭 이벤트마다 클래스명 show가 토글
document
.getElementsByClassName("list-group")[0]
.classList.toggle("show");
});
</script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"
></script>
</body>
</html>
.alert-box {
background-color: skyblue;
padding: 20px;
color: white;
border-radius: 5px;
display: none; /* 보여주고 싶으면 display: block; */
}
.list-group {
display: none;
}
.show {
display: block;
}
classList.명령어( )
로 Nav바를 on / off 적용한다.- 셀렉터는 일반적으로 class와 id를 보통 사용한다.
document.querySelector('.list-group')
는 css 문법을 그대로 사용할 수 있다.- 클래스가 중복되면
document.querySelectorAll('.list-group')[인덱스 번호]
로 이용한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<!-- jQuery cdn -->
<script
src="https://code.jquery.com/jquery-3.6.4.min.js"
integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8="
crossorigin="anonymous"
></script>
<body>
<p class="hello">안녕</p>
<button id="test-btn">버튼</button>
<script>
$(".hello").html("안녕하세요."); // 한 줄로 hello클래스 모든 내용 변경
$(".hello").css("color", "red"); // 스타일 변경
$(".hello").addClass("show"); // 클래스명 추가
$(".hello").removeClass("show"); // 클래스명 제거
$(".hello").toggleClass("show"); // 클래스명 토글
$("#test-btn").on("click", function () { // addEventListener를 on으로 대체
$(".hello").hide(); // style.display = 'none'과 비슷
$(".hello").fadeOut();
$(".hello").slideUpe();
});
</script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"
></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<!-- jQuery cdn -->
<script
src="https://code.jquery.com/jquery-3.6.4.min.js"
integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8="
crossorigin="anonymous"
></script>
<div class="black-bg">
<div class="white-bg">
<h4>로그인하세요</h4>
<button class="btn btn-danger" id="close">닫기</button>
</div>
</div>
<button id="enter">들어가기</button>
<script>
$("#enter").on("click", function () {
$(".black-bg").addClass("show");
});
</script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"
></script>
</body>
</html>
.black-bg {
width: 100%;
height: 100%;
position: fixed;
background: rgba(0, 0, 0, 0.5);
z-index: 5;
padding: 30px;
visibility: hidden; /* 애니메이션 줄 때는 display: none; 대신 모습만 숨기는 visibility 사용 */
opacity: 0;
transition: all 1s; /* 서서히 변하게 해줌 */
}
.white-bg {
background: white;
border-radius: 5px;
padding: 30px;
}
.show {
visibility: visible;
opacity: 1;
}
- one - way 애니메이션
- 시작 스타일 설정
- 최종 스타일 설정
- 변하게 만드는 조건 설정
- transion 추가
- 애니메이션은 성능상 css로만 구현하는 것이 좋다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="main.css" />
<title>Document</title>
</head>
<body>
<script
src="https://code.jquery.com/jquery-3.6.4.min.js"
integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8="
crossorigin="anonymous"
></script>
<div class="black-bg">
<div class="white-bg">
<h4>로그인하세요</h4>
<form action="success.html">
<div class="my-3">
<input type="text" class="form-control" id="email" />
</div>
<div class="my-3">
<input type="password" class="form-control" id="pwd" />
</div>
<button type="submit" class="btn btn-primary">전송</button>
<button type="button" class="btn btn-danger" id="close">닫기</button>
</form>
</div>
</div>
<button id="login">로그인</button>
<script>
$("#login").on("click", function () {
$(".black-bg").addClass("show");
});
$("form").on("submit", function () {
if (document.getElementById("email").value == "") { // 사용자의 input
alert("아이디를 입력해주세요."); // alert는 '문장'을 팝업창 띄어주는 함수
} else if (document.getElementById("pwd").value == "") { // if가 거짓이면 else if 실행
alert("비밀번호를 입력해주세요.");
} else if (document.getElementById("pwd").value.length < 6) { // 사용자의 input 길이
alert("비밀번호는 6자 이상으로 입력해주세요.");
}
});
</script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"
></script>
</body>
</html>
input
: 값이 입력될 때마다 시행
change
: 값이 변경되고 포커스를 잃을 때 발생
==
: 느슨한 비교 (ex) 1과 '1'을 true)
===
: 엄격한 비교 (ex) 1과 '1'을 false)
&&
: and 기호
||
: or 기호
<span class="badge bg-dark">Dark</span>
<script>
var cnt = 0; // 변수 선언과 할당
$(".badge").on("click", function () {
cnt += 1; // 버튼 클릭시 1씩 더함
if (cnt % 2 == 1) { // 홀짝 경우
$(".badge").html("Light");
} else {
$(".badge").html("Dark");
}
});
</script>
변수의 장점
- 길고 복잡한 자료 저장 가능함
- 특정 값으로 설정 또는 기억하기 위함.
실제 다크모드
- class를 별도로 다크모드로 디자인한다.
<script>
var cnt = 1; // 변수 생성과 할당
cnt = 2; // 변수 재할당
let cnt = 0;
let cnt = 1; // let은 재선언 불가
const cnt = 0;
const cnt = 1; // const은 재선언 불가
cnt = 1; // const은 재할당도 불가
</script>
재선언 불가 : 중복 이름을 막아 버그를 방지함
재할당 불가 : 바뀌지 않을 값을 사용하기에 용이함