ABOUT ME

-

Today
-
Yesterday
-
Total
-
choco@desktop:~/tistory
$ 정보처리기사 요점정리
1과목 2과목 3과목 4과목 5과목 실기

$ Linux Kernel
Power Management DVFS
  • Time Timer extension 만들기 - 2 (Timer 형태로 변형하기)
    SW개발 2019. 7. 17. 17:01

    1에서 만든 파일을 수정하여 진행하였다. (https://computer-choco.tistory.com/144)

     

    manifest.json은 변경하지 않았고, popup.html은 input을 받아야하기 때문에 다음과 같이 변경하였다. input과 button의 디자인은 https://www.w3schools.com/css/css_form.asp 를 참고하였다. 또한 input 태그와 button 태그의 수직 정렬이 잘 안 돼서 https://everyflower.tistory.com/182 의 글을 참고하였다.

    <!DOCTYPE html>
    <head>
        <style>
            BODY {width: 400px; min-height: 500px;}
            input {background-color: #CCE8F4; border: none; width:50px; height: 30px;
                font-size:25px; font-family:arial; text-align:center;
                margin: 4px 4px;  vertical-align:middle;}
            input:focus {border-bottom: 2px solid #2f5a69;}
            button {background-color: #2f5a69; border: none; color:white;
                padding: 8px 8px; margin: 4px 4px; cursor: pointer;  }
        </style>
        <script src="popup.js"></script>
    </head>
    <body style="background-color:#CCE8F4">
        <canvas id="canvas" width="400" height="400" style="background-color:#CCE8F4"></canvas>
        <div style="text-align: center;">
            <input type="text" id="current_time1" value="60">
            :
            <input type="text" id="current_time2" value="00">
            <button type="submit" id="button">Start</button>
        </div>
    </body>
    </html>

    여기서 사용된 파란 색상은 https://encycolorpedia.kr/50bcdf를 참고하였다.

    다음으로 popup.js 또한 시계를 타이머로 변경하기 위해 다음과 같이 코드를 수정하였다. 부채꼴 형태를 만들기 위해서는 ctx.moveTo() 가 필요했다. http://blog.naver.com/javaking75/140170132097를 참고하였다. 

    function drawClock(){
        // background
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
        var radius = canvas.height / 2;
        var button = document.getElementById('button');
    
        ctx.translate(radius, radius);
        radius = radius * 0.90
    
        // initialize
        drawFace(ctx, radius);
        drawNumbers(ctx, radius);
        drawTime(ctx, radius);
    
        // onclick event
        button.onclick = function(){
    
            var setTimer = setInterval(function(){
                // reset background
                drawFace(ctx, radius);
    
                // fill red area
                var time1 = document.getElementById("current_time1");
                var time2 = document.getElementById("current_time2");
                var current_time = time1.value * 60 + Number(time2.value);
    
                current_time -= 1
                time1.value = parseInt(current_time/60);
                time2.value = current_time % 60;
    
                // stop setInterval()
                if (current_time <= 0){
                    clearInterval(setTimer);
                }
    
                ctx.beginPath();
                ctx.moveTo(0,0)
                ctx.arc(0, 0, radius*0.7, (Math.PI/180)*270 - (Math.PI/180)*(current_time/10), (Math.PI/180)*270);
                ctx.closePath();
                ctx.fillStyle = "red";
                ctx.fill();
    
                // face
                ctx.beginPath();
                ctx.arc(0, 0, radius * 0.1, 0, 2 * Math.PI);
                ctx.fillStyle = '#333';
                ctx.fill();
    
                // hand
                second = Math.PI*2 - (Math.PI/180)*(current_time/10);
                drawHand(ctx, second, radius*0.6, radius*0.02);
    
            }, 1000);
    
        }
    }
    
    function drawFace(ctx, radius){
        // clock
        ctx.beginPath();
        ctx.arc(0, 0, radius*0.7, 0 , 2 * Math.PI);
        ctx.fillStyle = "white";
        ctx.fill();
    
        // draw face
        ctx.beginPath();
        ctx.arc(0, 0, radius * 0.1, 0, 2 * Math.PI);
        ctx.fillStyle = '#333';
        ctx.fill();
    }
    
    function drawNumbers(ctx, radius){
        // numbers
        var ang;
        var num;
        ctx.font = radius * 0.12 + "px arial";
        ctx.textBaseline = "middle";
        ctx.textAlign = "center";
        for(num = 1; num < 13; num++){
            ang = num * Math.PI / 6;
            ctx.rotate(ang);
            ctx.translate(0, -radius * 0.85);
            ctx.rotate(-ang);
            var minnum = 60 - 5 * num;
            ctx.fillText(minnum.toString(), 0, 0);
            ctx.rotate(ang);
            ctx.translate(0, radius * 0.85);
            ctx.rotate(-ang);
        }
    }
    
    // time
    function drawTime(ctx, radius){
        drawHand(ctx, 0, radius*0.6, radius*0.02);
    }
    
    // hand
    function drawHand(ctx, pos, length, width) {
        ctx.beginPath();
        ctx.lineWidth = width;
        ctx.lineCap = "round";
        ctx.moveTo(0,0);
        ctx.rotate(pos);
        ctx.lineTo(0, -length);
        ctx.stroke();
        ctx.rotate(-pos);
    }
    
    window.onload = drawClock;

     

    이렇게 변경하면 다음과 같은 형태를 확인할 수 있다.

     

    ** 이 과정을 git으로 정리하였는데, .gitignore에 작성을 해도, .idea 폴더가 사라지지 않는 현상이 나타났다. 이는 .gitignore가 작성되기 이전 시점의 파일들은 무시할 수 없게 되어있기 때문이었다. 그래서 다음의 코드를 작성하여 .idea 폴더가 더 이상 track되지 않도록 했다. (https://stackoverflow.com/questions/32384473/gitignore-not-ignoring-idea-path)

    git rm -rf .idea
    git commit -m "delete .idea"
    git push

     

    댓글

Designed by Tistory.