var sentence = new Sentence(); function Sentence(){ this.word_data = new Array( "안녕하세요.", "가까운 무당보다 먼 데 무당이 용하다.", "가나다라도 모른다.", "사공 배 둘러대듯", "사기전에 종짓굽 맞추듯", "칼끝의 원쑤", "차 치고 포 친다.", "차돌에 바람 들면 석돌보다 못하다.", "바늘 가는 데 실 간다.", "바늘구멍으로 황소바람 들어온다.", "다 된 농사에 낫 들고 덤빈다.", "다 된 죽에 코 빠졌다.", "가난도 비단 가난", "가래장부는 본고을 좌수도 몰라본다.", "가랑잎이 솔잎더러 바스락거린다고 한다.", "고기 새끼 하나 보고 가마솥 부신다.", "그 아버지에 그 아들", "급하면 바늘허리에 실 매어 쓸까", "나 많은 말이 콩 마다할까", "나는 새에게 여기 앉아라 저기 앉아라 할 수 없다.", "누구네 제사날 기다리다가 사흘 굶은 거지 굶어 죽었다.", "눈을 떠도 코 베어 간다.", "눈이 아무리 밝아도 제 코는 안 보인다.", "달기는 엿집 할머니 손가락이라", "달아나는 노루 보고 얻은 토끼를 놓았다.", "두 손뼉이 맞아야 소리가 난다.", "뒷집 짓고 앞집 뜯어 내란다.", "아가리 마구 난 창구멍인가", "아는 걸 보니 소강절의 똥구멍에 움막 짓고 살았겠다.", "아직 이도 나기 전에 갈비를 뜯는다.", "자기 늙은 것은 몰라도 남 자라는 것은 안다.", "자식을 낳기보다 부모 되기가 더 어렵다.", "자식을 보기엔 아비만 한 눈이 없고 제자를 보기엔 스승만 한 눈이 없다.", "잔치는 잘 먹은 놈 잘 차렸다 하고 못 먹은 놈 못 차렸다 한다.", "잘 싸우는 장수에게는 내버릴 병사가 없고 글 잘 쓰는 사람에게는 내버릴 글자가 없다.", "칼치가 제 꼬리 베 먹는다.", "추어주면 엉뎅이 나가는 줄 모른다.", "자식 과년하면 부모가 반중매쟁이 된다.", "잔치 보러 왔다가 초상 본다.", ); this.word = ""; this.inputWord = ""; this.timeSecond = 0; this.timeInt; this.timeFlag = true; this.wordTrueCnt = 0; this.typingSpeed = 0; this.setting = function(){ var idx = Math.floor(Math.random(1)*this.word_data.length); this.word = this.word_data[idx]; var wordString = this.obj("wordArea"); var typingArea = this.obj("typingText"); var timeArea = this.obj("typingTime"); this.timeFlag = true; this.timeInt = window.clearInterval(sentence.timeInt); this.timeSecond = 0; this.wordTrueCnt = 0; wordString.html(this.word); typingArea.val(""); typingArea.focus(); timeArea.html(this.timeSecond) } this.obj = function(id){ return $("#" + id); } this.keyUp = function(){ this.chkMiss(); var typingArea = this.obj("typingText"); if(this.word.length <= typingArea.val().length){ var wordAccuracy = Math.floor(this.wordTrueCnt / this.word.length*100); $("#accuracyText").text(wordAccuracy + "%"); $("#accuracyDiv").css("width" , wordAccuracy + "%"); var typingSpeed = Math.floor(this.wordTrueCnt / this.timeSecond * 6000); $("#typingSpeedText").text(typingSpeed + " 타/분"); $("#typingSpeed").css("width" , typingSpeed/10 + "%"); sentence.setting(); } }; this.chkMiss = function(){ var result = ""; var typingArea = this.obj("typingText"); this.inputWord = typingArea.val(); this.wordTrueCnt = 0; for(var i=0; i<this.word.length; i++){ var chkWord = this.word.substring(i, i+1); var inputChkWord = this.inputWord.substring(i, i+1); if(chkWord != inputChkWord && i < this.inputWord.length ){ result += "<font class='wordFalse'>" + chkWord +"</font>"; }else{ result += chkWord; this.wordTrueCnt++; } } var wordString = this.obj("wordArea"); wordString.html(result); }; this.chkTime = function(e){ if(this.timeFlag){ this.timeFlag = false; this.timeSecond = 0; this.timeInt = window.setInterval("sentence.increaseTime()", 10) } } this.increaseTime = function(){ this.timeSecond++; } } $(document).ready(function(){ sentence.setting(); }) <style> #wordArea{ width:100%; height:100px; border:1px solid gray; margin-top:20px; font-size:25pt; color:navy; text-align:center; line-height:3em; background-color:#E9E9E9; } #typingArea{ width:100%; border:1px solid gray; margin-top:20px; margin-bottom:40px; text-align:center; padding:30px 0; background-color:#E9E9E9; } #typingArea input{ width:50%; height:30px; font-size:20pt; } .wordFalse{color:red;background-color:yellow;} .accuracyArea tr th{ border:1px solid gray; background-color:#E9E9E9; } .accuracyArea tr td{ border:1px solid gray; background-color:lightgray; height:30px; } </style> <div id="wordArea"></div> <div id="typingArea"> <input type="text" name="typingText" id="typingText" value="" onkeydown="sentence.chkTime(event)" onkeyup="sentence.chkMiss();" onkeypress="sentence.keyUp()"> </div> <table width="100%" border="0" cellpadding="0" cellspacing="3" class="accuracyArea"> <tr> <th width="10%;">정확도</th> <td bgcolor="lightgray"> <div style="width:0;height:100%;background-color:#9BD374;" id="accuracyDiv"> </div> </td> <th id="accuracyText" width="10%"></th> </tr> <tr> <th width="10%;">타수</th> <td bgcolor="lightgray"> <div style="width:0;height:100%;background-color:#62BEFF;" id="typingSpeed"> </div> </td> <th id="typingSpeedText" width="10%"></th> </tr> </table>