HTML 5学習記録---canvas学習の動画スナップショット

6289 ワード

canvas    
            。js     :170798851        

gitプロジェクトアドレス:https://github.com/Jonavin/HTML5_Study
 
主な考え方:
snapshotBtn.onclick = function(e){
        var dataUrl;
        if(snapshotBtn.value === "  "){
            dataUrl = cvs.toDataURL();//    
            clearInterval(loop);
            snapshotImg.src = dataUrl;
            snapshotImg.style.display = "inline";
            cvs.style.display = "none";
            snapshotBtn.value="  ";
        }else{
            cvs.style.display  = "inline";
            snapshotImg.style.display  = "none";
            loop = setTimeout(function(){
                _functions.drawClock.call(_functions);
            },1000);
            snapshotBtn.value="  ";
        }
    }

 
/**
 * Created by wsf on 2014-11-22.
 */
(function(win){
    "use strict";
    var doc = win.document,cvs = doc.getElementById("canvas"),ctx = cvs.getContext("2d"),
        WIDTH = cvs.width,HEIGHT = cvs.height,
        FONT_HEIGHT=3,MARGIN=160,HAND_TRUNCATION = WIDTH/10,
        HOUR_HAND_TRUNCTION = WIDTH/10,NUMERAL_SPACING = 20,
        RADIUS = WIDTH/2-MARGIN,HAND_RADIUS=RADIUS+NUMERAL_SPACING,
        numerals = [1,2,3,4,5,6,7,8,9,10,11,12],
        snapshotBtn = doc.getElementById("snapshotBtn"),
        snapshotImg = doc.getElementById("snapshotImg"),
        loop;

    /**
     *     
     * @type {{}}
     */
    var _functions = {
        //     
        drawCircle:function(){
            ctx.beginPath();//    
            ctx.arc(WIDTH/2,HEIGHT/2,RADIUS,0,Math.PI*2,true);
            ctx.stroke();
        },
        //     
        drawNumerals:function(){
            var angle = 0,numeralWidth = 0;
            numerals.forEach(function(numeral){
                angle = Math.PI/6*(numeral-3);
                numeralWidth = ctx.measureText(numeral).width;
                ctx.fillText(numeral,WIDTH/2+Math.cos(angle)*(HAND_RADIUS)-numeralWidth/2,HEIGHT/2+Math.sin(angle)+(HAND_RADIUS)+FONT_HEIGHT/3);
            });
        },
        //     
        drawCenter:function(){
            ctx.beginPath();
            ctx.arc(WIDTH/2,HEIGHT/2,5,0,Math.PI*2,true);
            ctx.fill();//  
        },
        //     
        drawHand:function(loc,isHour){
            var angle = (Math.PI*2)*(loc/60)-Math.PI/ 2,
                handRadius = isHour?RADIUS-HAND_TRUNCATION-HOUR_HAND_TRUNCTION:RADIUS-HAND_RADIUS;
            ctx.moveTo(WIDTH/2,HEIGHT/2);//      
            ctx.lineTo(WIDTH/2+Math.cos(angle)*handRadius,HEIGHT/2+Math.sin(angle)*handRadius);
            ctx.stroke();
        },
        //        
        drawHands:function(){
            var _d = new Date,_h = _d.getHours(),
                _h = _h>12?_h-12:_h;
            this.drawHand(_h*5+(_d.getMinutes()/60)*5,true);
            this.drawHand(_d.getMinutes(),false);
            this.drawHand(_d.getSeconds(),false);
        },
        //      
        drawClock: function () {
            ctx.clearRect(0,0,WIDTH,HEIGHT);//    
            this.drawCircle();
            this.drawCenter();
            this.drawHands();
            //this.drawNumerals();
        }
    }

    ctx.font = FONT_HEIGHT+"px";
    loop = setInterval(function(){
        _functions.drawClock.call(_functions);
    },1000);

    /**
     *     
     * @param e
     */
    snapshotBtn.onclick = function(e){
        var dataUrl;
        if(snapshotBtn.value === "  "){
            dataUrl = cvs.toDataURL();//    
            clearInterval(loop);
            snapshotImg.src = dataUrl;
            snapshotImg.style.display = "inline";
            cvs.style.display = "none";
            snapshotBtn.value="  ";
        }else{
            cvs.style.display  = "inline";
            snapshotImg.style.display  = "none";
            loop = setTimeout(function(){
                _functions.drawClock.call(_functions);
            },1000);
            snapshotBtn.value="  ";
        }
    }

})(window);

 
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>canvas  </title>
    <style>
        body{
            background: #ddd;
        }
        body{
            background: #aaaaaa;
        }
        #canvas{
            position: absolute;
            left:10px;
            top:1.5em;
            margin:20px;
            border: thin solid dodgerblue;
            background: #fff;
        }
        #snapshotImg{
            position: absolute;
            display: none;
            left: 10px;
            top:1.5em;
            margin:20px;
            border: thin solid dodgerblue;
            background: #fff;
        }
    </style>
</head>
<body>
  <div id="controls">
      <input type="button" id="snapshotBtn" value="  "/>
  </div>
  <img id="snapshotImg"/>
  <canvas id="canvas" width="500" height="300"></canvas>
</body>
<script src="clock.js"></script>
</html>