HTML5(三)canvas(1)

anvas標籤:
<canvas>
        不支持 canvas 的瀏覽器可以看到的內容
<canvas> 繪製環境:
        getContext('2d'):目前支持2d的場景
(1)繪製方塊
     fillRect(L, T, W, H):默認顏色是黑色
     strokeRect(L, T, W, H):帶邊框的方塊,默認1像素黑色邊框,顯示出來的不一樣
(2)設置繪圖
     fillStyle:填充顏色(繪製canvas是有順序的)
     lineWidth:線寬度,是一個數值
       strokeStyle:邊線顏色
(3)邊界繪製
     lineJoin:邊界連接點樣式—miter(默認)、round(圓角)、bevel(斜角)
     lineCap:端點樣式—butt(默認)、round(圓角)、square(高度多出爲寬一半的角)

<!DOCTYPE>
<html>
<head>
<meta charset="utf-8" />
<title>無標題文檔</title>
<style>
body{ background:black;}
#c1{ background:white;}
span{ color:white;}
</style>
<script>
window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d'); 
        oGC.fillStyle = 'red';
        oGC.strokeStyle = 'blue';
        oGC.lineWidth = 10;
        oGC.lineJoin = 'bevel';
        oGC.fillRect(50,50,100,100);
        oGC.strokeRect(50.5,50.5,100,100);
};
</script>
</head>
<body>
<canvas id="c1" width="400" height="400">
        <span>不支持canvas瀏覽器</span>
</canvas> <!--默認:寬300 高150-->
</body>
</html>

(4)繪製路徑
      beginPath:開始繪製路徑
      closePath:結束繪製路徑
      moveTo:移動到繪製的新目標點
      lineTo:新的目標點
      stroke:畫線,默認黑色
      fill:填充,默認黑色
      rect:矩形區域
      clearRect:刪除一個畫布的矩形區域
      save:保存路徑
      restore:恢復路徑

window.onload = function(){
        var oC = document.getElementById('c1');

        var oGC = oC.getContext('2d'); 
        // 開始作畫
        oGC.beginPath();
        // 起始點
        oGC.moveTo(100, 100);
        // 結束點
        oGC.lineTo(200, 200);
        // 再畫一條
        oGC.lineTo(300, 200);
        // 閉合繪圖(連接起始點和結束點)
        oGC.closePath();

        // 畫線,默認黑色
        oGC.stroke();
        // 填充,默認黑色
        oGC.fill();
};
        繪製方塊,等價於fillRect()
        oGC.beginPath();
        oGC.rect(100, 100, 100, 100);
        oGC.closePath();
        oGC.fill()
        oGC.save();
        oGC.fillStyle = 'red';
        oGC.beginPath();
        oGC.moveTo(100,100);
        oGC.lineTo(200,200);
        oGC.lineTo(300,200);
        oGC.closePath();
        oGC.fill();
        oGC.restore();

案例:
——鼠標畫線

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d'); 

        oC.onmousedown = function(ev){
                var ev = ev || window.event;
                oGC.moveTo(ev.clientX - oC.offsetLeft, ev.clientY - oC.offsetTop);
                document.onmousemove = function(ev){
                        var ev = ev || window.event;
                        oGC.lineTo(ev.clientX - oC.offsetLeft, ev.clientY - oC.offsetTop);
                        oGC.stroke();
                }
                document.onmouseup = function(){
                        document.onmousemove = null;
                        document.onmousedown = null;
                }
        }
};

——方塊移動

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d'); 
        var num = 0;
        oGC.fillRect(0, 0, 100, 100);

        setInterval(function() {
                num++;
                oGC.clearRect(0, 0, oC.width, oC.height);
                oGC.fillRect(num, num, 100, 100);
        }, 30);
};

(5)繪製圓
     arc(x, y, 半徑, 起始弧度, 結束弧度, 旋轉方向)
       —x,y:起始位置
       —弧度與角度的關係:弧度 = 角度 * Math.PI/180
         —旋轉方向:順時針(默認:false)、逆時針(true)

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d');
        oGC.moveTo(200, 200);
        //弧度 = 角度*Math.PI/180
        oGC.arc(200, 200, 150, 0, 90*Math.PI/180, true);
        // 閉合
        oGC.closePath();
        // 畫線
        oGC.stroke();
};

案例
——用arc去畫鐘錶

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d'); 

        function toDraw(){
                var x = 200;
                var y = 200;
                var r = 150;

                oGC.clearRect(0, 0, oC.width, oC.height);

                var oDate = new Date();
                var oHours = oDate.getHours();
                var oMin = oDate.getMinutes();
                var oSen = oDate.getSeconds();
                // 時分秒的弧度
                var oHoursValue = (-90 + oHours*30 + oMin/2) * Math.PI/180;
                var oMinValue = (-90 + oMin*6) * Math.PI/180;
                var oSenValue = (-90 + oSen*6) * Math.PI/180;

                // oGC.moveTo(x, y);
                // oGC.arc(x, y, r, 0, 6*Math.PI/180, false);
                // oGC.moveTo(x, y);
                // oGC.arc(x, y, r, 6*Math.PI/180, 12*Math.PI/180, false);

                // 畫刻度(小分割線,60格)
                oGC.beginPath();
                for(var i=0; i<60; i++){
                        oGC.moveTo(x, y);
                        oGC.arc(x, y, r, 6*i*Math.PI/180, 6*(i+1)*Math.PI/180, false);
                }
                oGC.closePath();
                oGC.stroke();

                // 畫圓盤
                oGC.fillStyle = 'white';
                oGC.beginPath();
                oGC.moveTo(x, y);
                oGC.arc(x, y, r*19/20, 0, 360*Math.PI/180, false)
                oGC.closePath();
                oGC.fill();

                // 畫刻度(大分割線,12格)
                oGC.lineWidth = 3;
                oGC.beginPath();
                for(var i=0; i<12; i++){
                        oGC.moveTo(x, y);
                        oGC.arc(x, y, r, 30*i*Math.PI/180, 30*(i+1)*Math.PI/180, false);
                }
                oGC.closePath();
                oGC.stroke();

                // 畫圓盤
                oGC.fillStyle = 'white';
                oGC.beginPath();
                oGC.moveTo(x, y);
                oGC.arc(x, y, r*18/20, 0, 360*Math.PI/180, false)
                oGC.closePath();
                oGC.fill();

                // 或秒針、分針、時針
                // 時針
                oGC.lineWidth = 5;
                oGC.beginPath();
                oGC.moveTo(x, y);
                oGC.arc(x, y, r*10/20, oHoursValue, oHoursValue, false)
                oGC.closePath();
                oGC.stroke();
                // 分針
                oGC.lineWidth = 3;
                oGC.beginPath();
                oGC.moveTo(x, y);
                oGC.arc(x, y, r*14/20, oMinValue, oMinValue, false)
                oGC.closePath();
                oGC.stroke();

                // 秒針
                oGC.lineWidth = 1;
                oGC.beginPath();
                oGC.moveTo(x, y);
                oGC.arc(x, y, r*18/20, oSenValue, oSenValue, false)
                oGC.closePath();
                oGC.stroke();
        }
        setInterval(function(){
                toDraw();
        }, 1000);       
};

(6)繪製其他曲線
   arcTo(x1, y1, x2, y2, r):第一組座標,第二組座標,半徑

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d');
        oGC.moveTo(100,200);
        oGC.arcTo(100,100,200,100,50);
        oGC.stroke();
}

   quadraticCurveTo(dx, dy, x1, y1):貝塞爾曲線——第一組控制點,第二組結束座標

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d');
        oGC.moveTo(100,200);
        quadraticCurveTo(100,100,200,100);
        oGC.stroke();
}

   bezierCurveTo(dx1, dy1, dx2, dy2, x1, y1):貝塞爾曲線——第一組控制點,第二組控制點,第三組結束座標

window.onload = function(){
        var oC = document.getElementById('c1');
        var oGC = oC.getContext('2d');
        oGC.moveTo(100,200);
        oGC.bezierCurveTo(100,100,200,200,200,100);
        oGC.stroke();

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章