Day 49 : Exercise
[실습문제]
1. 다음과 같은 웹 페이지가 있다. 이 웹 페이지가 로드될 때, '접속 감사합니다!' 라는 문구를 담은 200x80 크기의 새 윈도우를 별도로 출력하도록 웹 페이지를 수정하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5</title>
<script>
function load() {
var newWin = window.open("", "myWin", "width=200, height=80")
newWin.document.write("접속 감사합니다!")
}
</script>
</head>
<body onload="load()">
<h3>HTML5</h3>
<hr>
<p>
HTML5를 학습하는 사이트입니다.
여기서 HTML5, CSS3, 자바스크립트를
배울 수 있습니다.
</p>
</body>
</html>
2. 문제 1의 코드를 수정해보자.
(1) 새 윈도우가 스크린 장치를 기준으로 (500, 400)에 출력되게 하라.
(2) 새 윈도우의 타이틀을 '환영'으로, 바탕색을 yellowgreen으로 출력되도록 하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5</title>
<script>
function load() {
var newWin = window.open("", "myWin", "width=200, height=80, top=400, left=500")
newWin.document.write("접속 감사합니다! <br> 열심히 하세요!")
newWin.document.title = "환영";
newWin.document.body.style.backgroundColor="yellowgreen";
}
</script>
</head>
<body onload="load()">
<h3>HTML5</h3>
<hr>
<p>
HTML5를 학습하는 사이트입니다.
여기서 HTML5, CSS3, 자바스크립트를
배울 수 있습니다.
</p>
</body>
</html>
3. 옵션을 선택하면 옵션에 주어진 사이트에 접속하는 웹 페이지를 작성하고자 한다.
(1) 옵션이 선택될 때마다 새 윈도우를 하나씩 열고 사이트를 접속하는 웹 페이지를 작성하라.
(2) 새 윈도우는 한 개만 열고, 옵션 선택 시 이 윈도우를 공유하도록 웹 페이지를 작성하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>사이트 접속</title>
<script>
function openWindow() {
var select = document.getElementById("site");
var newWin = window.open("", "myWin", "width=1000, height=700");
newWin.location = select.options[select.selectedIndex].value;
}
</script>
</head>
<body>
<h3>옵션 선택으로 사이트 접속</h3>
옵션 선택 마다 새 윈도우에 접속합니다.
<hr>
접속할 사이트 <p>
<select name="site" id="site" onchange="openWindow()">
<option value="http://www.naver.com" selected>네이버</option>
<option value="http://www.google.com">구글</option>
<option value="http://www.oracle.com">오라클</option>
</select>
</body>
</html>
4. 웹 페이지를 로드하자마자 크롬 브라우저인지를 판단하여 다음과 같이 alert() 로 출력하는 웹 페이지를 작성하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5</title>
<script>
function isGoogle() {
var str = navigator.userAgent
if(str.indexOf("Chrome") !== -1) {
alert("구글 Chrome 브라우저입니다.");
} else {
alert("구글 Chrome 브라우저가 아닙니다. \n"
+ "navigator.userAgent: \n" + str)
}
}
</script>
</head>
<body onload="isGoogle()">
<h3>구글 Chrome 브라우저 감별</h3>
<hr>
<p>웹 브라우저에 따라 지원되는 자바스크립트들이 다를 수도 있습니다. DOM의 기능은 표준화되어 있어 동일하지만, BOM 객체들은 많이 다릅니다. 얼른 모두 표준화되었으면 하지만 독창적인 기능으로 승부하고자 하여 쉽지는 않을 것 같습니다.</p>
</body>
</html>
<Chrome으로 실행 시>
<Internet Explorer로 실행 시>
5. setTimer()와 clearTimer()를 이용하여 <div> 태그에 시계를 구현하라. 웹 페이지가 로드되면 즉각 현재 시각에서부터 시계가 가기 시작한다. 현재 시각 값은 new Date()로 얻으면 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
background-color: aliceblue;
border: 1px solid black;
width: 100px;
height: 20px;
}
</style>
</head>
<body onload="startClock()">
<h3>div 태그에 시계 만들기</h3>
<hr>
<div id="div"></div>
<script>
function startClock() {
var div = document.getElementById("div");
showTime();
}
function showTime() {
var now = new Date();
div.innerHTML = now.toLocaleTimeString();
setTimeout("showTime()", 1000); //1초 후 showTime() 함수 재호출
}
</script>
</body>
</html>
6. setInterval()과 clearInterval()을 이용하여 <div> 태그에 시계를 구현하라. 시계 위를 클릭하면 시계가 멈추고 클릭하면 현재 시각부터 시계가 다시 가도록 하라. (클릭 상태 확인 변수 생성이 관건)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>setInterval() 활용</title>
<style>
div {
background-color: aliceblue;
border: 1px solid black;
width: 100px;
height: 20px;
}
</style>
</head>
<body onload="div.onclick">
<h3>div 태그에 시계 만들기</h3>
시계를 클릭하면 시계가 멈추고 다시 클릭하면 가기 시작한다.
<hr>
<div id="div"></div>
<script>
var div = null;
var tog = 0; //클릭 상태 확인 변수. 초기값(클릭 안했을 때 즉, 시계 작동 시) = 0
div = document.getElementById("div");
var timerID = setInterval("showTime()", 200);
div.onclick = function() {
if(tog == 1) { //시계 작동 중지 시 클릭하면
div.style.color = "black"; //검은색으로 변하고
timerID = setInterval("showTime()", 200); //시계 작동 시작
tog = 0; //초기값으로 돌아감 (클릭 되지 않은 상태 = 0)
} else if(tog == 0) { //시계 작동 시 클릭하면
div.style.color = "gray"; //회색으로 변하고
clearInterval(timerID); //타이머 작동 중지 (시계 작동 중지)
tog = 1; //클릭이 된 상태는 1로 줌
}
}
function showTime() {
var now = new Date();
div.innerHTML = now.toLocaleTimeString();
}
</script>
</body>
</html>
7. 수식을 출력하고 사용자로부터 답을 받아 채점하는 웹 페이지를 만들고자 한다.
(1) 다음과 같이 정해진 수식을 주고 사용자가 입력 창에 입력하고 채점 버튼을 클릭하면 맞은 개수를 출력한다. 답이 틀리면 문제 위에 줄을 긋는다. 수식은 웹 페이지내에 HTML 태그로 작성한 수식이다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>산수 문제를 풀어 봅시다.</title>
<style>
</style>
<script>
function calculate() {
var count = 0;
var math1 = document.getElementById("math1");
var div1 = document.getElementById("div1");
var math2 = document.getElementById("math2");
var div2 = document.getElementById("div2");
var math3 = document.getElementById("math3");
var div3 = document.getElementById("div3");
var math4 = document.getElementById("math4");
var div4 = document.getElementById("div4");
if(math1.value == eval(div1.innerHTML)) {
count++;
} else {
div1.style.textDecoration = "line-through";
}
if(math2.value == eval(div2.innerHTML)) {
count++;
} else {
div2.style.textDecoration = "line-through";
}
if(math3.value == eval(div3.innerHTML)) {
count++;
} else {
div3.style.textDecoration = "line-through";
}
if(math4.value == eval(div4.innerHTML)) {
count++;
} else {
div4.style.textDecoration = "line-through";
}
var p = document.getElementById("pp");
p.innerHTML = count;
}
</script>
</head>
<body>
<h3>산수 문제를 풀어 봅시다.</h3>
수식을 계산하여 답을 입력하고 채점 버튼을 누르세요.
<hr>
<table>
<tr><td><div id="div1">5*6</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math1"></td></tr>
<tr><td><div id="div2">7+5*3</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math2"></td></tr>
<tr><td><div id="div3">23*2</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math3"></td></tr>
<tr><td><div id="div4">35-7</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math4"></td></tr>
<tr><td><input type="button" value="채점" onclick="calculate()"></td><td><p style="width: 100px; margin-left: 20px;" id="pp">0</p></td></tr>
</table>
</body>
</html>
(2) 문제 1을 보완하여 처음부터 사칙 연산 문제를 랜덤하게 생성하고, 다시 버튼을 누를 때마다 문제가 만들어지도록 웹 페이지를 작성하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>산수 문제를 풀어 봅시다.</title>
<style>
</style>
<script>
function calculate() {
var count = 0;
var math1 = document.getElementById("math1");
var div1 = document.getElementById("div1");
var math2 = document.getElementById("math2");
var div2 = document.getElementById("div2");
var math3 = document.getElementById("math3");
var div3 = document.getElementById("div3");
var math4 = document.getElementById("math4");
var div4 = document.getElementById("div4");
if(math1.value == eval(div1.innerHTML)) {
count++;
} else {
div1.style.textDecoration = "line-through";
}
if(math2.value == eval(div2.innerHTML)) {
count++;
} else {
div2.style.textDecoration = "line-through";
}
if(math3.value == eval(div3.innerHTML)) {
count++;
} else {
div3.style.textDecoration = "line-through";
}
if(math4.value == eval(div4.innerHTML)) {
count++;
} else {
div4.style.textDecoration = "line-through";
}
var p = document.getElementById("pp");
p.innerHTML = count;
}
function makeQuestion() {
var math1 = document.getElementById("math1");
var div1 = document.getElementById("div1");
var math2 = document.getElementById("math2");
var div2 = document.getElementById("div2");
var math3 = document.getElementById("math3");
var div3 = document.getElementById("div3");
var math4 = document.getElementById("math4");
var div4 = document.getElementById("div4");
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div1.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div2.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div3.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div4.innerHTML = question1 + cal + question2;
}
</script>
</head>
<body onload="makeQuestion()">
<h3>산수 문제를 풀어 봅시다.</h3>
수식을 계산하여 답을 입력하고 채점 버튼을 누르세요.
<hr>
<table>
<tr><td><div id="div1">5*6</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math1"></td></tr>
<tr><td><div id="div2">7+5*3</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math2"></td></tr>
<tr><td><div id="div3">23*2</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math3"></td></tr>
<tr><td><div id="div4">35-7</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math4"></td></tr>
<tr><td><input type="button" value="채점" onclick="calculate()"></td><td><p style="width: 100px; margin-left: 20px;" id="pp">0</p></td>
<td><input type="button" value="다시" onclick="makeQuestion()"></td></tr>
</table>
</body>
</html>
8. 문제 7을 수정해보자. 10초의 시간이 지나면 자동으로 채점하도록 웹 페이지를 작성하라. 다시 버튼을 누르면 새 문제가 주어진다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>산수 문제를 풀어 봅시다.</title>
<style>
</style>
<script>
function calculate() {
var count = 0;
var math1 = document.getElementById("math1");
var div1 = document.getElementById("div1");
var math2 = document.getElementById("math2");
var div2 = document.getElementById("div2");
var math3 = document.getElementById("math3");
var div3 = document.getElementById("div3");
var math4 = document.getElementById("math4");
var div4 = document.getElementById("div4");
if(math1.value == eval(div1.innerHTML)) {
count++;
} else {
div1.style.textDecoration = "line-through";
}
if(math2.value == eval(div2.innerHTML)) {
count++;
} else {
div2.style.textDecoration = "line-through";
}
if(math3.value == eval(div3.innerHTML)) {
count++;
} else {
div3.style.textDecoration = "line-through";
}
if(math4.value == eval(div4.innerHTML)) {
count++;
} else {
div4.style.textDecoration = "line-through";
}
var p = document.getElementById("pp");
p.innerHTML = count;
}
function makeQuestion() {
var math1 = document.getElementById("math1");
var div1 = document.getElementById("div1");
var math2 = document.getElementById("math2");
var div2 = document.getElementById("div2");
var math3 = document.getElementById("math3");
var div3 = document.getElementById("div3");
var math4 = document.getElementById("math4");
var div4 = document.getElementById("div4");
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div1.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div2.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div3.innerHTML = question1 + cal + question2;
var question1 = Math.round(Math.random()*29) + 1;
var question2 = Math.round(Math.random()*29) + 1;
var cal = Math.round(Math.random()*2) + 1;
switch(cal) {
case 1 : cal = "+";
break;
case 2 : cal = "-";
break;
case 3 : cal = "*";
break;
}
div4.innerHTML = question1 + cal + question2;
setTimeout("calculate()", 10000);
}
</script>
</head>
<body onload="makeQuestion()">
<h3>산수 문제를 풀어 봅시다.</h3>
문제는 자동으로 생성되며, 10초가 지나면 자동 채점됩니다.
<hr>
<table>
<tr><td><div id="div1">5*6</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math1"></td></tr>
<tr><td><div id="div2">7+5*3</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math2"></td></tr>
<tr><td><div id="div3">23*2</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math3"></td></tr>
<tr><td><div id="div4">35-7</div></td><td><input type="text" style="width: 100px; margin-left: 20px;" id="math4"></td></tr>
<tr><td><input type="button" value="다시" onclick="makeQuestion()"></td><td><p style="width: 100px; margin-left: 20px;" id="pp">0</p></td></tr>
</table>
</body>
</html>
9. 스크린의 해상도가 1280x1024보다 작은 경우, 웹 페이지가 로드되자마자 "스크린 해상도가 낮습니다." 라고 경고 창을 출력하는 웹 페이지를 작성하라.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>screen 객체 활용</title>
<script>
function init() {
if(screen.width < 1280 || screen.height < 1024) {
alert("스크린의 해상도가 낮습니다.")
}
var p = document.getElementById("p");
p.innerHTML = "해상도 : " + screen.width + "x" + screen.height;
}
</script>
</head>
<body onload="init()">
<p id="p"></p>
<h3>screen 객체 활용</h3>
<hr>
스크린의 해상도가 1280x1024 보다 작은 경우 웹 페이지가 정상적으로 출력되지 않을 수 있음을 알리는 경고창을 출력한다.
</body>
</html>