CANVAS

/**canvas

 * Created by ll0u on 1/9/2015.rest

 */視頻

window.onload = function(){對象

    var canvas = document.getElementById('canvas');ip

    var context = canvas.getContext('2d');get

    //canvas的座標,默認是x軸向右,y軸向下it

    context.strokeStyle = 'green';io

    context.save(); //保存狀態,即除繪畫以外的全部狀態,如strokeStyle等event

    context.strokeStyle = 'red';function

    context.strokeRect(0,0,100,100);

    context.restore();

    context.strokeRect(300,300,100,100);//恢復狀態,即除繪畫以外的全部狀態,如    context.save(); //保存狀態,即除繪畫以外的全部狀態,如strokeStyle等,將    context.save(); //保存狀態,即除繪畫以外的全部狀態,如strokeStyle等,將strokeStyle變爲green


    context.beginPath();//有了beginPath就能夠不用moveTo了,第一個lineTo的做用就至關於moveTo

    context.lineTo(200,200);

    context.lineTo(200,300);

    context.lineTo(300,300);

    context.closePath(); //closePath會使不閉合的曲線變得閉合

    context.fillStyle = 'pink'; //strokeStyle和fillStyle的值能夠是顏色,也能夠是漸變或pattern對象

    context.fill(); //fill會使不閉合的曲線變得閉合

    context.stroke();


    context.beginPath(); //若是這裏不加beginPath,則上一個路徑會被下面的fill,stroke從新填充,並且線條也會從上一次終點繪製到下一次的起點,加了之後則告訴canvas,這裏是一個新路徑,與上面無關

    context.lineTo(400,400);

    context.lineTo(400,500);

    context.lineTo(500,500);

    context.closePath();

    context.lineWidth = 10;

    context.lineCap = 'round'; //設置線條起始點與終點的樣式

    context.lineJoin = 'miter'; //設置曲線鏈接處的樣式 round、miter

    context.miterLimit = 2;//當lineJoin爲miter時,設置miter的程度,默認是20

    context.fillStyle = 'gray';

    context.fill(); //由於canvas是基於狀態繪圖,因此fill和stroke會將全部的路徑都填充

    context.stroke(); //stroke最好放在fill的後面,若放在fill以前,當線寬較寬時,會有一部分被fill覆蓋


    context.beginPath();

    context.strokeRect(250, 250, 50, 50) //strokeRect不會形成與上一次線條的終點鏈接;

    context.closePath();


    context.save();

    context.translate(300,300); //將canvas的參考點移到300,300

    context.scale(2,2); //將canvas繪製的圖像進行縮放

    context.rotate(45);//將canvas繪製的圖像進行旋轉

    context.beginPath();

    context.moveTo(0,0);

    context.lineTo(100,100);

    context.closePath();

    context.strokeStyle = 'gold';

    context.stroke();

    context.restore();


    context.save();

    context.beginPath();

    context.arc(200, 200, 200, 0, Math.PI, true); //繪製圓弧,(圓心,半徑,起始弧度,終止弧度,方向)會不加beginPath和上一次的終點鏈接

    context.stroke();

    context.closePath();

    context.restore()


    context.save();

    context.beginPath();

    context.moveTo(400,400);

    context.arcTo(500, 400, 500, 600, 100); //(點1,點2, 半徑),從上一次起點開始,在三個點之間肯定半徑爲50的圓弧

    context.stroke();

    context.closePath();

    context.restore()


    context.save();

    context.beginPath();

    context.moveTo(350,200);

    context.quadraticCurveTo(450, 100, 550, 200); //二次貝塞爾曲線(點1,點2),以上次終點爲起點,點1爲控制點,點2爲終點畫弧。

    context.stroke();

    context.closePath();

    context.restore()


    context.save();

    context.beginPath();

    context.moveTo(400,300);

    context.bezierCurveTo(500,0, 700,600, 800,300);//三次貝塞爾曲線,(點1,點2,點3),以上次終點爲起點,點1和點2爲控制點,點3爲終點畫弧。

    context.stroke();

    context.closePath();

    context.restore()


    var gradientStyle = context.createLinearGradient(200,200, 200,400); //(點1,點2)建立線性漸變色,起點到終點

    gradientStyle.addColorStop(0, 'pink'); //爲漸變色添加顏色

    gradientStyle.addColorStop(0.5, 'gold');

    gradientStyle.addColorStop(1, 'gray');

    context.save();

    context.beginPath();

    context.moveTo(200,200);

    context.lineTo(200,400);

    context.closePath();

    context.strokeStyle = gradientStyle;

    context.stroke();

    context.restore()


    var gradientRadialStyle = context.createRadialGradient(200,200,0, 200,200,100); //(圓1,圓2)建立徑向漸變色,圓環1到圓環2

    gradientRadialStyle.addColorStop(0, 'pink'); //爲漸變色添加顏色

    gradientRadialStyle.addColorStop(0.5, 'gold');

    gradientRadialStyle.addColorStop(1, 'gray');

    context.save();

    context.beginPath();

    context.arc(200, 200, 100, 0, Math.PI*2);

    context.closePath();

    context.fillStyle = gradientRadialStyle;

    context.fill();

    context.restore()


    var img = new Image();

    img.src = '16.jpg';

    img.onload = function(){

        var pattern = context.createPattern(img, 'repeat'); //(圖像或視頻或canvas,重複放方式),建立一個填充對象

        context.save();

        context.fillStyle = pattern;

        context.beginPath();

        context.fillRect(100, 100, 100, 100);

        context.closePath();

        context.restore()

    }


    drawStar(context, 5, 10, 'gold', 600, 500);


    context.save();

    context.lineWidth = 2;

    context.globalAlpha = 0.2;

    context.globalCompositeOperation = 'destination-over';

    context.font = '25px "微軟雅黑"';

    context.textAlign = 'center';

    context.textBaseline = 'bottom';

    context.beginPath();

    context.strokeText('fefefe', 100, 100);

    context.closePath();

    context.fill();

    context.restore();


  /*  context.save();

    context.beginPath();

    context.fillStyle = 'black';

    context.fillRect(0,0,800,600);

    context.closePath();

    context.restore();


    context.save();

    context.beginPath();

    context.fillStyle = 'white';

    context.arc(400,300,100,0,6.28);

    context.fill(); //使下面出現的圖像都只在這個範圍內才顯示

    context.clip();*/


    canvas.onclick = function(){

        var x = window.event.clientX - canvas.getBoundingClientRect().left;

        var y = window.event.clientY - canvas.getBoundingClientRect().top;

        context.save();

        context.beginPath();

        context.lineTo(0,0);

        context.lineTo(800,0);

        context.lineTo(800,600);

        context.lineTo(0,800);

        context.lineTo(0,0);

        if(context.isPointInPath(x, y)){  //判斷點擊的點是否在上面的範圍內

            alert(99)

        }

        context.restore();

    }


    context.save();

    context.beginPath();

    context.shadowColor = 'gray'; //陰影顏色

    context.shadowOffsetX = 5;

    context.shadowOffsetY = 5;

    context.shadowBlur = 1;

    context.lineTo(20,20);

    context.lineTo(500,200);

    context.stroke();

    context.closePath();

    context.restore();


}


function drawStar(cxt, r, R,color,  tranX, tranY){

    cxt.save();

    cxt.beginPath();

    for(var i=0; i<=5; i++){

        cxt.lineTo(R*Math.cos(((18+72*i)/360)*2*Math.PI) + tranX, R*Math.sin(((18+72*i)/360)*2*Math.PI) + tranY);

        cxt.lineTo(r*Math.cos(((54+72*i)/360)*2*Math.PI) + tranX, r*Math.sin(((54+72*i)/360)*2*Math.PI) + tranY);

    }

    cxt.fillStyle = color;

    cxt.closePath();

    cxt.fill();

    cxt.restore()

}

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息