Html5 之 Canvas
Html5 之 Canvas
涂孟超 发表于3年前
Html5 之 Canvas
  • 发表于 3年前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   


标签:
<canvas id="myCanvas" width="200" height="200" style="border:1px solid #c3c3c3;">不支持提示</canvas>


相关接口:
//
interface CanvasRenderingContext2D {
    readonly attribute HTMLCanvasElement canvas;

    void save();
    void restore();

    void scale(in double x, in double y);
    void rotate(in double angle);
    void translate(in double x, in double y);
    void transform(in double a, in double b, in double c, in double d, in double e, in double f);
    void setTransform(in double a, in double b, in double c, in double d, in double e, in double f);

    attribute double globalAlpha;                 // (default 1.0)
    attribute DOMString globalCompositeOperation; // (default source-over)

    attribute any strokeStyle; // (default black)
    attribute any fillStyle;   // (default black)

    CanvasGradient createLinearGradient(in double x0, in double y0, in double x1, in double y1);
    CanvasGradient createRadialGradient(in double x0, in double y0, in double r0, in double x1, in double y1, in double r1);
    CanvasPattern createPattern(in HTMLImageElement image, in DOMString repetition);
    CanvasPattern createPattern(in HTMLCanvasElement image, in DOMString repetition);
    CanvasPattern createPattern(in HTMLVideoElement image, in DOMString repetition);

    attribute double lineWidth;   // (default 1)
    attribute DOMString lineCap;  // "butt", "round", "square" (default "butt")
    attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter")
    attribute double miterLimit;  // (default 10)

    attribute double shadowOffsetX;  // (default 0)
    attribute double shadowOffsetY;  // (default 0)
    attribute double shadowBlur;     // (default 0)
    attribute DOMString shadowColor; // (default transparent black)

    void clearRect(in double x, in double y, in double w, in double h);
    void fillRect(in double x, in double y, in double w, in double h);
    void strokeRect(in double x, in double y, in double w, in double h);

    void beginPath();
    void closePath();
    void moveTo(in double x, in double y);
    void lineTo(in double x, in double y);
    void quadraticCurveTo(in double cpx, in double cpy, in double x, in double y);
    void bezierCurveTo(in double cp1x, in double cp1y, in double cp2x, in double cp2y, in double x, in double y);
    void arcTo(in double x1, in double y1, in double x2, in double y2, in double radius);
    void rect(in double x, in double y, in double w, in double h);
    void arc(in double x, in double y, in double radius, in double startAngle, in double endAngle, in optional boolean anticlockwise);
    void fill();
    void stroke();
    void clip();
    boolean isPointInPath(in double x, in double y);

    boolean drawFocusRing(in Element element, in double xCaret, in double yCaret, in optional boolean canDrawCustom);

    attribute DOMString font;         // (default 10px sans-serif)
    attribute DOMString textAlign;    // "start", "end", "left", "right", "center" (default: "start")
    attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
    void fillText(in DOMString text, in double x, in double y, in optional double maxWidth);
    void strokeText(in DOMString text, in double x, in double y, in optional double maxWidth);
    TextMetrics measureText(in DOMString text);

    void drawImage(in HTMLImageElement image, in double dx, in double dy, in optional double dw, in double dh);
    void drawImage(in HTMLImageElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);
    void drawImage(in HTMLCanvasElement image, in double dx, in double dy, in optional double dw, in double dh);
    void drawImage(in HTMLCanvasElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);
    void drawImage(in HTMLVideoElement image, in double dx, in double dy, in optional double dw, in double dh);
    void drawImage(in HTMLVideoElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);

    ImageData createImageData(in double sw, in double sh);
    ImageData createImageData(in ImageData imagedata);
    ImageData getImageData(in double sx, in double sy, in double sw, in double sh);
    void putImageData(in ImageData imagedata, in double dx, in double dy, in optional double dirtyX, in double dirtyY, in double dirtyWidth, in double dirtyHeight);
};

//
interface CanvasGradient {
    void addColorStop(in double offset, in DOMString color);
};

//
interface CanvasPattern {
    // opaque object
};

//
interface TextMetrics {
    readonly attribute double width;
};

//
interface ImageData {
    readonly attribute unsigned long width;
    readonly attribute unsigned long height;
    readonly attribute CanvasPixelArray data;
};

//
interface CanvasPixelArray {
    readonly attribute unsigned long length;
    getter octet (in unsigned long index);
    setter void (in unsigned long index, in octet value);
};


微软官方示例:

Rectangles: [双击代码可查看运行效果 - 用谷歌浏览器]
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillRect(50, 20, 145, 145);

    ctx.fillStyle = "rgb(0, 162, 232)";
    ctx.fillRect(135, 85, 125, 125);

    ctx.lineWidth = 5;

    ctx.strokeStyle = "rgb(0, 0, 0)";
    ctx.strokeRect(50, 335, 145, 145);

    ctx.strokeStyle = "rgb(0, 162, 232)";
    ctx.strokeRect(135, 275, 125, 125);

    ctx.fillStyle = "rgba(255, 255, 0, 0.75)";
    ctx.fillRect(210, 180, 125, 125);
</script>
</body>
</html>


Arcs:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.fillStyle = "rgb(0 ,0 ,0)";
    ctx.arc(123, 93, 80, 0, 2 * Math.PI, true);
    ctx.fill();

    ctx.beginPath();
    ctx.fillStyle = "rgb(0, 162, 232)";
    ctx.arc(198, 158, 70, 0, 2 * Math.PI, true);
    ctx.fill();

    ctx.lineWidth = 5;

    ctx.beginPath();
    ctx.strokeStyle = "rgb(0, 0, 0)";
    ctx.arc(123, 408, 80, 0, 1.5 * Math.PI, false);
    ctx.stroke();

    ctx.beginPath();
    ctx.strokeStyle = "rgb(0, 162, 232)";
    ctx.arc(198, 328, 70, 0, 0.5 * Math.PI, true);
    ctx.stroke();

    ctx.beginPath();
    ctx.fillStyle = "rgba(255, 255, 0, 0.75)";
    ctx.arc(273, 243, 70, 0, 2 * Math.PI, true);
    ctx.fill();
</script>
</body>
</html>


Quadratic:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(194, 104);
    ctx.quadraticCurveTo(54, 104, 54, 246);
    ctx.quadraticCurveTo(54, 371, 194, 371);
    ctx.quadraticCurveTo(324, 371, 338, 272);
    ctx.lineTo(240, 272);
    ctx.arc(197, 272, 47, 0, Math.PI, false);
    ctx.lineTo(150, 256);
    ctx.lineTo(338, 256);
    ctx.quadraticCurveTo(338, 104, 194, 104);
    ctx.moveTo(154, 207);
    ctx.fillStyle = "rgb(9, 126, 196)";
    ctx.fill();
    ctx.closePath();

    ctx.beginPath();
    ctx.fillStyle = "rgb(255, 255, 255)";
    ctx.lineTo(240, 211);
    ctx.arc(197, 211, 47, 0, Math.PI, true);
    ctx.fill();
    ctx.closePath();
</script>
</body>
</html>


Bezier:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.lineWidth = 20;
    ctx.beginPath();
    ctx.moveTo(230, 130);
    ctx.bezierCurveTo(230, 130, 230, 130, 230, 210);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(170, 130);
    ctx.bezierCurveTo(170, 130, 170, 130, 170, 210);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(100, 230);
    ctx.bezierCurveTo(100, 230, 200, 380, 300, 230);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(219, 298);
    ctx.bezierCurveTo(278, 351, 315, 315, 277, 258);
    ctx.stroke();
</script>
</body>
</html>


Clipping:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var index = 0;
    timer1 = setInterval(renderLoop, 16);

    function renderLoop() {
        if (index > 600) index = 0;
        index += 4;
        draw(index);
    }

    function draw(x) {
        ctx.fillStyle = "black";
        ctx.fillRect(0, 0, 400, 500);

        ctx.save();
        ctx.beginPath();
        ctx.arc(x, x, 200, 0, Math.PI * 2, true);
        ctx.clip();

        ctx.fillStyle = "white";
        ctx.fillRect(0, 0, 400, 500);

        drawSmiley();
        ctx.restore();
    }

    function drawSmiley() {
        ctx.lineWidth = 20;
        ctx.beginPath();
        ctx.moveTo(230, 130);
        ctx.bezierCurveTo(230, 130, 230, 130, 230, 210);
        ctx.stroke();

        ctx.beginPath();
        ctx.moveTo(170, 130);
        ctx.bezierCurveTo(170, 130, 170, 130, 170, 210);
        ctx.stroke();

        ctx.beginPath();
        ctx.moveTo(100, 230);
        ctx.bezierCurveTo(100, 230, 200, 380, 300, 230);
        ctx.stroke();

        ctx.beginPath();
        ctx.moveTo(219, 298);
        ctx.bezierCurveTo(278, 351, 315, 315, 277, 258);
        ctx.stroke();
    }                   
</script>
</body>
</html>


fillStyle:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var a = 1;

    for (j = 0; j < 100; j++) {
        var r = 255, g = 0, b = 0;

        for (i = 0; i < 150; i++) {
            if (i < 25) g += 10.2;
            else if (i >= 25 && i < 50) r -= 10.2;
            else if (i >= 50 && i < 75) {
                g -= 10.2;
                b += 10.2;
            }
            else if (i >= 75 && i < 100) r += 10.2;
            else b -= 10.2;
            ctx.fillStyle = "rgba(" + Math.floor(r) + "," +
                      Math.floor(g) + "," +
                      Math.floor(b) + "," + a + ")";
            ctx.fillRect(3 * i, 5 * j, 3, 5);
        }
        a -= 0.01;
    }
</script>
</body>
</html>


strokeStyle:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var a = 1;

    for (j = 0; j < 100; j++) {
        var r = 255, g = 0, b = 0;
        for (i = 0; i < 150; i++) {
            if (i < 25) g += 10.2;
            else if (i >= 25 && i < 50) r -= 10.2;
            else if (i >= 50 && i < 75) {
                g -= 10.2;
                b += 10.2;
            }
            else if (i >= 75 && i < 100) r += 10.2;
            else b -= 10.2;
            ctx.strokeStyle = "rgba(" + Math.floor(r) + "," +
                        Math.floor(g) + "," +
                        Math.floor(b) + "," + a + ")";
            ctx.strokeRect(3 * i, 5 * j, 3, 5);
        }
        a -= 0.01;
    }
</script>
</body>
</html>


Gradients:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var gradient1 = ctx.createLinearGradient(0, 0, 0, 500);
    gradient1.addColorStop(0, "#00ABEB");
    gradient1.addColorStop(1, "white");

    var gradient2 = ctx.createLinearGradient(0, 25, 0, 450);
    gradient2.addColorStop(0, "red");
    gradient2.addColorStop(0.4, "white");
    gradient2.addColorStop(1, "red");

    var gradient3 = ctx.createRadialGradient(0, 0, 50, 0, 0, 100);
    gradient3.addColorStop(0, "#F4F201");
    gradient3.addColorStop(0.8, "#E4C700");
    gradient3.addColorStop(1, "rgba(228,199,0,0)");

    var gradient4 = ctx.createRadialGradient(250, 1, 1, 250, 1, 225);
    gradient4.addColorStop(0, "white");
    gradient4.addColorStop(1, "gray");

    ctx.fillStyle = gradient1;
    ctx.fillRect(0, 0, 400, 500);

    ctx.fillStyle = gradient3;
    ctx.fillRect(0, 0, 100, 100);

    ctx.fillStyle = gradient4;
    ctx.beginPath();
    ctx.arc(310, 50, 25, 9, Math.PI, true);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(340, 50, 30, 9, Math.PI, true);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(370, 50, 25, 9, Math.PI, true);
    ctx.fill();

    ctx.beginPath();
    ctx.moveTo(200, 25);
    ctx.lineTo(50, 200);
    ctx.lineTo(200, 450);
    ctx.lineTo(350, 200);
    ctx.lineTo(200, 25);
    ctx.fillStyle = "rgb(255, 0, 0)";
    ctx.fill();

    ctx.lineWidth = 2;
    ctx.beginPath();
    ctx.moveTo(200, 25);
    ctx.lineTo(200, 200);
    ctx.lineTo(350, 200);
    ctx.fillStyle = gradient2;
    ctx.fill();
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(50, 200);
    ctx.lineTo(200, 200);
    ctx.lineTo(200, 450);
    ctx.fillStyle = gradient2;
    ctx.fill();
    ctx.stroke();

    ctx.lineWidth = 2;
    ctx.beginPath();
    ctx.moveTo(200, 450);
    ctx.bezierCurveTo(75, 460, 155, 350, 36, 290);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(8, 290);
    ctx.lineTo(62, 290);
    ctx.lineTo(58, 270);
    ctx.lineTo(12, 310);
    ctx.lineTo(8, 290);
    ctx.fillStyle = gradient2;
    ctx.fill();
    ctx.stroke();

    ctx.lineWidth = 5;
    ctx.lineCap = "round";
    ctx.beginPath();
    ctx.moveTo(200, 25);
    ctx.lineTo(50, 200);
    ctx.lineTo(200, 450);
    ctx.lineTo(350, 200);
    ctx.lineTo(200, 25);
    ctx.stroke();
</script>
</body>
</html>


Patterns:
<!doctype html>
<html>
<body>
<img id="ie_small" src="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie_small.png" style="display: none" />
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var image = document.getElementById("ie_small");
    var pattern = ctx.createPattern(image, "repeat");
    ctx.fillStyle = pattern;

    drawClearCenteredE();

    function drawClearCenteredE() {
        ctx.beginPath();
        ctx.moveTo(194, 104);
        ctx.quadraticCurveTo(54, 104, 54, 246);
        ctx.quadraticCurveTo(54, 371, 194, 371);
        ctx.quadraticCurveTo(324, 371, 338, 272);
        ctx.lineTo(240, 272);
        ctx.arc(197, 272, 47, 0, Math.PI, false);
        ctx.lineTo(150, 256);
        ctx.lineTo(338, 256);
        ctx.quadraticCurveTo(338, 104, 194, 104);
        ctx.moveTo(154, 207);
        ctx.fill();
        ctx.closePath();

        ctx.beginPath();
        ctx.fillStyle = 'rgb(255, 255, 255)';
        ctx.lineTo(240, 211);
        ctx.arc(197, 211, 47, 0, Math.PI, true);
        ctx.fill();
        ctx.closePath();
    }
</script>
</body>
</html>


lineWidth:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    for (i = 20; i > 0; i--) {
        ctx.strokeStyle = "black";
        ctx.lineWidth = i;
        ctx.beginPath();
        ctx.moveTo(55, 20 + (20 - i) * 24);
        ctx.lineTo(335, 20 + (20 - i) * 24);
        ctx.stroke();
    }
</script>
</body>
</html>


lineCap:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.textBaseline = "top";
    ctx.textAlign = "left";
    ctx.font = '24px "Segoe UI"';

    var styles = ["round", "square", "butt"];

    for (i = 0; i < styles.length; i++) {
        ctx.fillStyle = "rgb(0, 89, 187)";
        ctx.fillText(styles[i], 10, 75 + i * 125);

        ctx.strokeStyle = "black";
        ctx.lineWidth = 50;
        ctx.lineCap = styles[i];
        ctx.beginPath();
        ctx.moveTo(125, 125 + i * 125);
        ctx.lineTo(350, 125 + i * 125);
        ctx.stroke();

        ctx.strokeStyle = "red";
        ctx.lineWidth = 1;
        ctx.beginPath();
        ctx.moveTo(60, 125 + i * 125);
        ctx.lineTo(390, 125 + i * 125);
        ctx.stroke();
    }

    ctx.beginPath();
    ctx.moveTo(125, 75);
    ctx.lineTo(125, 425);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(350, 75);
    ctx.lineTo(350, 425);
    ctx.stroke();
</script>
</body>
</html>


lineJoin:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.textBaseline = "top";
    ctx.textAlign = "left";
    ctx.font = '24px "Segoe UI"';

    var styles = ["bevel", "round", "miter"];
    for (i = 0; i < styles.length; i++) {
        ctx.fillStyle = "rgb(0, 89, 187)";
        ctx.fillText(styles[i], 40, 50 + i * 150);

        ctx.lineJoin = styles[i];
        ctx.lineWidth = 75;
        ctx.strokeStyle = "black";

        ctx.beginPath();
        ctx.moveTo(155, 90 + i * 150);
        ctx.lineTo(225, 90 + i * 150);
        ctx.lineTo(225, 150 + i * 150);
        ctx.stroke();

        ctx.strokeStyle = "red";
        ctx.lineWidth = 1;
        ctx.beginPath();
        ctx.moveTo(100, 90 + i * 150);
        ctx.lineTo(300, 90 + i * 150);
        ctx.stroke();
    }

    ctx.strokeStyle = "red";
    ctx.lineWidth = 1;

    ctx.beginPath();
    ctx.moveTo(155, 30);
    ctx.lineTo(155, 470);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(225, 30);
    ctx.lineTo(225, 470);
    ctx.stroke();
</script>
</body>
</html>


Shadows:
<!doctype html>
<html>
<body>
<img id="ie" src="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie.png" style="display: none" />
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.shadowOffsetX = 10;
    ctx.shadowOffsetY = 10;
    ctx.shadowBlur = 10;
    ctx.shadowColor = "rgba(0, 0, 0, 1)";

    ctx.fillStyle = "black";
    ctx.font = "72px Segoe UI";
    ctx.fillText("Canvas", 90, 60);

    var image = document.getElementById("ie");
    ctx.drawImage(image, 70, 70, 250, 250);

    var gradient = ctx.createLinearGradient(0, 0, 250, 0);
    gradient.addColorStop(0, "#0080FF");
    gradient.addColorStop(1, "#FFFFFF");

    ctx.fillStyle = gradient;
    ctx.fillRect(25, 330, 340, 20);

    ctx.beginPath();
    ctx.fillStyle = "rgba(30, 144, 255, 0.25)";
    ctx.arc(50, 420, 30, 0, 2 * Math.PI, true);
    ctx.fill();

    ctx.beginPath();
    ctx.fillStyle = "rgba(30, 144, 255, 0.5)";
    ctx.arc(150, 420, 30, 0, 2 * Math.PI, true);
    ctx.fill();

    ctx.beginPath();
    ctx.fillStyle = "rgba(30, 144, 255, 0.75)";
    ctx.arc(250, 420, 30, 0, 2 * Math.PI, true);
    ctx.fill();

    ctx.beginPath();
    ctx.fillStyle = "rgba(30, 144, 255, 1)";
    ctx.arc(350, 420, 30, 0, 2 * Math.PI, true);
    ctx.fill();
</script>
</body>
</html>


Text:
<!doctype html>
<html>
<body>
<img id="ie_small" src="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie_small.png" style="display: none" />
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.textBaseline = "top";
    ctx.textAlign = "left";

    ctx.fillText("IE9 supports HTML5 Canvas", 0, 0);

    ctx.font = '24px "Segoe UI"';
    ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
    ctx.fillText("IE9 supports HTML5 Canvas", 0, 30);

    ctx.save();
    ctx.shadowOffsetX = 5;
    ctx.shadowOffsetY = 5;
    ctx.shadowBlur = 5;
    ctx.shadowColor = "rgba(0, 0, 0, 1)";
    ctx.font = '72px "Segoe UI" bold';
    ctx.strokeText("IE9 supports HTML5 Canvas", 0, 70);

    var gradient = ctx.createLinearGradient(0, 160, 0, 300);
    gradient.addColorStop(0, "#0080FF");
    gradient.addColorStop(1, "#FFFFFF");
    ctx.fillStyle = gradient;
    ctx.font = '127px "Segoe UI" bold';
    ctx.fillText("IE9 supports HTML5 Canvas", 0, 160);
    ctx.strokeText("IE9 supports HTML5 Canvas", 0, 160);
    ctx.restore();

    var image = document.getElementById("ie_small");
    var pattern = ctx.createPattern(image, "repeat");
    ctx.fillStyle = pattern;
    ctx.font = '254px "Segoe UI" bold';
    ctx.fillText("IE9 supports HTML5 Canvas", 0, 275);
    ctx.strokeText("IE9 supports HTML5 Canvas", 0, 275);
</script>
</body>
</html>


Image:
<!doctype html>
<html>
<body>
<img id="ie" src="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie.png" style="display: none" />
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var image = document.getElementById("ie");
    ctx.drawImage(image, -10, 45, 400, 400);
</script>
</body>
</html>


Video:
<!doctype html>
<html>
<body>
<video id="video" src="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/fish.mp4" width="640" height="360" loop style="display: none"></video>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    timer1 = setInterval(drawVideo, 16);

    function drawVideo() {
        if (!isNaN(video.duration)) {
            video.play();
            ctx.drawImage(video, 0, 0, 400, 500);
        }
    } 
</script>
</body>
</html>


Rotate:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.translate(200, 250);

    for (i = 0; i < 10; i++) {
        ctx.rotate(0.2 * Math.PI);

        ctx.fillStyle = "rgba(0, 128, 255, 0.5)";
        ctx.fillRect(10, 0, 150, 50);
    }
</script>
</body>
</html>


Scale:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.lineWidth = 2;
    ctx.beginPath();
    ctx.fillStyle = "rgba(255, 255, 0, 0.75)";
    ctx.arc(80, 80, 70, 0, 2 * Math.PI, true);
    ctx.fill();
    ctx.stroke();

    ctx.translate(75, 100);
    ctx.scale(2, 2);

    ctx.beginPath();
    ctx.fillStyle = "rgba(255, 255, 0, 0.75)";
    ctx.arc(80, 80, 70, 0, 2 * Math.PI, true);
    ctx.fill();
    ctx.stroke();
</script>
</body>
</html>


setTransform:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.translate(200, 250);

    var x = 6;
    var sine = Math.sin(1 / (x - 1) * Math.PI);
    var cose = Math.cos(1 / x * Math.PI);

    for (i = 0; i <= 2 * x; i++) {
        var color = 255 / (2 * x) * i;
        ctx.fillStyle = "rgba(" + color + "," + color + "," + color + ", 0.9)";
        drawClearE();
        ctx.transform(cose, sine, -sine, cose, 0, 0);
    }

    function drawClearE() {
        ctx.save();
        ctx.beginPath();
        ctx.moveTo(70, 0);
        ctx.quadraticCurveTo(0, 0, 0, 71);
        ctx.quadraticCurveTo(0, 133.5, 70, 133.5);
        ctx.quadraticCurveTo(135, 133.5, 142, 84);
        ctx.lineTo(93, 84);
        ctx.arc(71.5, 84, 21.5, 0, Math.PI, false);
        ctx.lineTo(50, 76);
        ctx.lineTo(142, 76);
        ctx.quadraticCurveTo(142, 0, 70, 0);
        ctx.moveTo(50, 53.5);
        ctx.fill();
        ctx.closePath();
        ctx.strokeStyle = "black";
        ctx.stroke();

        ctx.beginPath();
        ctx.fillStyle = "white";
        ctx.lineTo(93, 53.5);
        ctx.arc(71.5, 53.5, 21.5, 0, Math.PI, true);
        ctx.fill();
        ctx.closePath();
        ctx.strokeStyle = "black";
        ctx.stroke();
        ctx.restore();
    }
</script>
</body>
</html>


Stroke transform:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.lineWidth = 10;

    ctx.beginPath();
    ctx.arc(145, 225, 50, 0, Math.PI, true);
    ctx.moveTo(95, 225);
    ctx.lineTo(195, 330);

    ctx.setTransform(1, 4, 0, 1, 0, 0);
    ctx.stroke();

    ctx.setTransform(1, 0, 0, 1, 0, 0);

    ctx.beginPath();
    ctx.arc(245, 225, 50, 0, Math.PI, true);
    ctx.moveTo(295, 225);
    ctx.lineTo(195, 330);

    ctx.setTransform(1, -4, 0, 1, 0, 0);
    ctx.stroke();
</script>
</body>
</html>


Animation:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var WIDTH = cvs.width;
    var HEIGHT = cvs.height;

    var lastX = WIDTH * Math.random();
    var lastY = HEIGHT * Math.random();
    function line() {
        ctx.save();
        ctx.translate(WIDTH / 2, HEIGHT / 2);
        ctx.scale(0.9, 0.9);
        ctx.translate(-WIDTH / 2, -HEIGHT / 2);
        ctx.beginPath();
        ctx.lineWidth = 5 + Math.random() * 10;
        ctx.moveTo(lastX, lastY);
        lastX = WIDTH * Math.random();
        lastY = HEIGHT * Math.random();
        ctx.bezierCurveTo(WIDTH * Math.random(),
                         HEIGHT * Math.random(),
                         WIDTH * Math.random(),
                         HEIGHT * Math.random(),
                         lastX, lastY);

        var r = Math.floor(Math.random() * 255) + 70;
        var g = Math.floor(Math.random() * 255) + 70;
        var b = Math.floor(Math.random() * 255) + 70;

        var s = 'rgba(' + r + ',' + g + ',' + b + ', 1.0)';
        ctx.shadowColor = 'white';
        ctx.shadowBlur = 10;
        ctx.strokeStyle = s;
        ctx.stroke();
        ctx.restore();
    }
    timer1 = setInterval(line, 50);

    function blank() {
        ctx.fillStyle = 'rgba(0,0,0,0.1)';
        ctx.fillRect(0, 0, WIDTH, HEIGHT);
    }
    timer2 = setInterval(blank, 40);
</script>
</body>
</html>


Mouse:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var WIDTH = cvs.width;
    var HEIGHT = cvs.height;

    var currentX = 0, currentY = 0;
    function OnMouseMove(e) {

        if (typeof e == 'undefined') e = canvas1.event;
        if (typeof e.offsetX != 'undefined' && typeof e.offsetY != 'undefined') {
            currentX = e.offsetX;
            currentY = e.offsetY;
        }
        else {
            var relPos = getRelativePos(e.clientX, e.clientY);
            currentX = relPos[0];
            currentY = relPos[1];
        }
    }
    if (cvs.addEventListener) cvs.addEventListener("mousemove", OnMouseMove, false);
    else if (cvs.attachEvent) cvs.attachEvent("onmousemove", OnMouseMove);

    //
    var lastX = 0, lastY = 0, count = 0;
    var r = Math.floor(Math.random() * 255) + 70;
    var g = Math.floor(Math.random() * 255) + 70;
    var b = Math.floor(Math.random() * 255) + 70;

    timer1 = setInterval(drawLoop, 16);

    function drawLines(x, y) {
        ctx.lineWidth = 40;
        ctx.lineCap = "round";
        ctx.beginPath();
        ctx.moveTo(lastX, lastY);
        ctx.lineTo(x, y);
        ctx.strokeStyle = "rgba(" + r + "," + g + "," + b + ", 1)";
        ctx.stroke();
    }

    function drawLoop() {
        ctx.fillStyle = "rgba(0,0,0,0.05)";
        ctx.fillRect(0, 0, WIDTH, HEIGHT);

        drawLines(currentX, currentY);

        if (count++ > 50) {
            count = 0;
            r = Math.floor(Math.random() * 255) + 70;
            g = Math.floor(Math.random() * 255) + 70;
            b = Math.floor(Math.random() * 255) + 70;
        }
        lastX = currentX;
        lastY = currentY;
    }
</script>
</body>
</html>


火狐官方示例

moveTo example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.arc(75, 75, 50, 0, Math.PI * 2, true);
    ctx.moveTo(110, 75);
    ctx.arc(75, 75, 35, 0, Math.PI, false);
    ctx.moveTo(65, 65);
    ctx.arc(60, 65, 5, 0, Math.PI * 2, true);
    ctx.moveTo(95, 65);
    ctx.arc(90, 65, 5, 0, Math.PI * 2, true);
    ctx.stroke();
</script>
</body>
</html>


lineTo example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(25, 25);
    ctx.lineTo(105, 25);
    ctx.lineTo(25, 105);
    ctx.fill();

    ctx.beginPath();
    ctx.moveTo(125, 125);
    ctx.lineTo(125, 45);
    ctx.lineTo(45, 125);
    ctx.closePath();
    ctx.stroke();
</script>
</body>
</html>


arc example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="200" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            ctx.beginPath();
            var x = 25 + j * 50;
            var y = 25 + i * 50;
            var radius = 20;
            var startAngle = 0;
            var endAngle = Math.PI + (Math.PI * j) / 2;
            var clockwise = i % 2 == 0 ? false : true;

            ctx.arc(x, y, radius, startAngle, endAngle, clockwise);

            if (i > 1) {
                ctx.fill();
            } else {
                ctx.stroke();
            }
        }
    }
</script>
</body>
</html>


quadraticCurveTo example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(75, 25);
    ctx.quadraticCurveTo(25, 25, 25, 62.5);
    ctx.quadraticCurveTo(25, 100, 50, 100);
    ctx.quadraticCurveTo(50, 120, 30, 125);
    ctx.quadraticCurveTo(60, 120, 65, 100);
    ctx.quadraticCurveTo(125, 100, 125, 62.5);
    ctx.quadraticCurveTo(125, 25, 75, 25);
    ctx.stroke();
</script>
</body>
</html>


globalAlpha example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillStyle = '#FD0';
    ctx.fillRect(0,0,75,75);
    ctx.fillStyle = '#6C0';
    ctx.fillRect(75,0,75,75);
    ctx.fillStyle = '#09F)';
    ctx.fillRect(0,75,75,75);
    ctx.fillStyle = '#F30';
    ctx.fillRect(75,75,150,150);
    ctx.fillStyle = '#FFF';

    ctx.globalAlpha = 0.2;

    for (i=0;i<7;i++){
        ctx.beginPath();
        ctx.arc(75,75,10+10*i,0,Math.PI*2,true);
        ctx.fill();
    }
</script>
</body>
</html>


linearGradient example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var lingrad = ctx.createLinearGradient(0, 0, 0, 150);
    lingrad.addColorStop(0, '#00ABEB');
    lingrad.addColorStop(0.5, '#fff');
    lingrad.addColorStop(0.5, '#66CC00');
    lingrad.addColorStop(1, '#fff');

    var lingrad2 = ctx.createLinearGradient(0, 50, 0, 95);
    lingrad2.addColorStop(0.5, '#000');
    lingrad2.addColorStop(1, 'rgba(0,0,0,0)');

    ctx.fillStyle = lingrad;
    ctx.strokeStyle = lingrad2;

    ctx.fillRect(10, 10, 130, 130);
    ctx.strokeRect(50, 50, 50, 50);
</script>
</body>
</html>


createRadialGradient example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var radgrad = ctx.createRadialGradient(45, 45, 10, 52, 50, 30);
    radgrad.addColorStop(0, '#A7D30C');
    radgrad.addColorStop(0.9, '#019F62');
    radgrad.addColorStop(1, 'rgba(1,159,98,0)');

    var radgrad2 = ctx.createRadialGradient(105, 105, 20, 112, 120, 50);
    radgrad2.addColorStop(0, '#FF5F98');
    radgrad2.addColorStop(0.75, '#FF0188');
    radgrad2.addColorStop(1, 'rgba(255,1,136,0)');

    var radgrad3 = ctx.createRadialGradient(95, 15, 15, 102, 20, 40);
    radgrad3.addColorStop(0, '#00C9FF');
    radgrad3.addColorStop(0.8, '#00B5E2');
    radgrad3.addColorStop(1, 'rgba(0,201,255,0)');

    var radgrad4 = ctx.createRadialGradient(0, 150, 50, 0, 140, 90);
    radgrad4.addColorStop(0, '#F4F201');
    radgrad4.addColorStop(0.8, '#E4C700');
    radgrad4.addColorStop(1, 'rgba(228,199,0,0)');

    ctx.fillStyle = radgrad4;
    ctx.fillRect(0, 0, 150, 150);
    ctx.fillStyle = radgrad3;
    ctx.fillRect(0, 0, 150, 150);
    ctx.fillStyle = radgrad2;
    ctx.fillRect(0, 0, 150, 150);
    ctx.fillStyle = radgrad;
    ctx.fillRect(0, 0, 150, 150);
</script>
</body>
</html>


createPattern example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var img = new Image();
    img.src = 'http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie_small.png';
    img.onload = function () {
        var ptrn = ctx.createPattern(img, 'repeat');
        ctx.fillStyle = ptrn;
        ctx.fillRect(0, 0, 150, 150);
    }
</script>
</body>
</html>


shadowed text example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.shadowOffsetX = 2;
    ctx.shadowOffsetY = 2;
    ctx.shadowBlur = 2;
    ctx.shadowColor = "rgba(0, 0, 0, 0.5)";

    ctx.font = "20px Times New Roman";
    ctx.fillStyle = "Black";
    ctx.fillText("Sample String", 5, 30);
</script>
</body>
</html>


save and restore canvas state example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillRect(0, 0, 150, 150);   
    ctx.save();                     

    ctx.fillStyle = '#09F'          
    ctx.fillRect(15, 15, 120, 120); 

    ctx.save();                     
    ctx.fillStyle = '#FFF'          
    ctx.globalAlpha = 0.5;
    ctx.fillRect(30, 30, 90, 90);   

    ctx.restore();                  
    ctx.fillRect(45, 45, 60, 60);   

    ctx.restore();                  
    ctx.fillRect(60, 60, 30, 30);   
</script>
</body>
</html>


translate example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="300" height="300" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillRect(0, 0, 300, 300);
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            ctx.save();
            ctx.strokeStyle = "#9CFF00";
            ctx.translate(50 + j * 100, 50 + i * 100);
            drawSpirograph(ctx, 20 * (j + 2) / (j + 1), -8 * (i + 3) / (i + 1), 10);
            ctx.restore();
        }
    }

    function drawSpirograph(ctx, R, r, O) {
        var x1 = R - O;
        var y1 = 0;
        var i = 1;
        ctx.beginPath();
        ctx.moveTo(x1, y1);
        do {
            if (i > 20000) break;
            var x2 = (R + r) * Math.cos(i * Math.PI / 72) - (r + O) * Math.cos(((R + r) / r) * (i * Math.PI / 72))
            var y2 = (R + r) * Math.sin(i * Math.PI / 72) - (r + O) * Math.sin(((R + r) / r) * (i * Math.PI / 72))
            ctx.lineTo(x2, y2);
            x1 = x2;
            y1 = y2;
            i++;
        } while (x2 != R - O && y2 != 0);
        ctx.stroke();
    }
</script>
</body>
</html>


rotate example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.translate(75, 75);
    for (i = 1; i < 6; i++) {
        ctx.save();
        ctx.fillStyle = 'rgb(' + (51 * i) + ',' + (255 - 51 * i) + ',255)';
        for (j = 0; j < i * 6; j++) {
            ctx.rotate(Math.PI * 2 / (i * 6));
            ctx.beginPath();
            ctx.arc(0, i * 12.5, 5, 0, Math.PI * 2, true);
            ctx.fill();
        }
        ctx.restore();
    }
</script>
</body>
</html>


scale example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="300" height="300" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.strokeStyle = "#fc0";
    ctx.lineWidth = 1.5;
    ctx.fillRect(0, 0, 300, 300);

    ctx.save()
    ctx.translate(50, 50);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(100, 0);
    ctx.scale(0.75, 0.75);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(133.333, 0);
    ctx.scale(0.75, 0.75);
    drawSpirograph(ctx, 22, 6, 5);
    ctx.restore();

    ctx.strokeStyle = "#0cf";
    ctx.save()
    ctx.translate(50, 150);
    ctx.scale(1, 0.75);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(100, 0);
    ctx.scale(1, 0.75);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(100, 0);
    ctx.scale(1, 0.75);
    drawSpirograph(ctx, 22, 6, 5);
    ctx.restore();

    ctx.strokeStyle = "#cf0";
    ctx.save()
    ctx.translate(50, 250);
    ctx.scale(0.75, 1);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(133.333, 0);
    ctx.scale(0.75, 1);
    drawSpirograph(ctx, 22, 6, 5);

    ctx.translate(177.777, 0);
    ctx.scale(0.75, 1);
    drawSpirograph(ctx, 22, 6, 5);
    ctx.restore();

    function drawSpirograph(ctx, R, r, O) {
        var x1 = R - O;
        var y1 = 0;
        var i = 1;
        ctx.beginPath();
        ctx.moveTo(x1, y1);
        do {
            if (i > 20000) break;
            var x2 = (R + r) * Math.cos(i * Math.PI / 72) - (r + O) * Math.cos(((R + r) / r) * (i * Math.PI / 72))
            var y2 = (R + r) * Math.sin(i * Math.PI / 72) - (r + O) * Math.sin(((R + r) / r) * (i * Math.PI / 72))
            ctx.lineTo(x2, y2);
            x1 = x2;
            y1 = y2;
            i++;
        } while (x2 != R - O && y2 != 0);
        ctx.stroke();
    }
</script>
</body>
</html>


setTransform examples:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="400" height="400" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var sin = Math.sin(Math.PI / 6);
    var cos = Math.cos(Math.PI / 6);
    ctx.translate(200, 200);
    var c = 0;
    for (var i = 0; i <= 12; i++) {
        c = Math.floor(255 / 12 * i);
        ctx.fillStyle = "rgb(" + c + "," + c + "," + c + ")";
        ctx.fillRect(0, 0, 100, 10);
        ctx.transform(cos, sin, -sin, cos, 0, 0);
    }

    ctx.setTransform(-1, 0, 0, 1, 200, 200);
    ctx.fillStyle = "rgba(255, 128, 255, 0.5)";
    ctx.fillRect(0, 50, 100, 100);
</script>
</body>
</html>


clip example:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillRect(0, 0, 150, 150);
    ctx.translate(75, 75);

    ctx.beginPath();
    ctx.arc(0, 0, 60, 0, Math.PI * 2, true);
    ctx.clip();

    var lingrad = ctx.createLinearGradient(0, -75, 0, 75);
    lingrad.addColorStop(0, '#232256');
    lingrad.addColorStop(1, '#143778');

    ctx.fillStyle = lingrad;
    ctx.fillRect(-75, -75, 150, 150);

    for (var j = 1; j < 50; j++) {
        ctx.save();
        ctx.fillStyle = '#fff';
        ctx.translate(75 - Math.floor(Math.random() * 150),
                  75 - Math.floor(Math.random() * 150));
        drawStar(ctx, Math.floor(Math.random() * 4) + 2);
        ctx.restore();
    }

    function drawStar(ctx, r) {
        ctx.save();
        ctx.beginPath()
        ctx.moveTo(r, 0);
        for (var i = 0; i < 9; i++) {
            ctx.rotate(Math.PI / 5);
            if (i % 2 == 0) {
                ctx.lineTo((r / 0.525731) * 0.200811, 0);
            } else {
                ctx.lineTo(r, 0);
            }
        }
        ctx.closePath();
        ctx.fill();
        ctx.restore();
    }
</script>
</body>
</html>


谷歌的例子

arc:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.arc(25, 25, 20, 0, Math.PI, false);
    ctx.stroke();

    ctx.save();
    ctx.scale(0.5, 0.5);
    ctx.beginPath();
    ctx.arc(75, 25, 20, 0, Math.PI * 2, false);
    ctx.stroke();
    ctx.restore();

    ctx.beginPath();
    ctx.arc(25, 75, 20, 0, Math.PI, true);
    ctx.stroke();

    ctx.beginPath();
    ctx.arc(75, 75, 20, 0, Math.PI * 2, true);
    ctx.stroke();
</script>
</body>
</html>


clearpath:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(0, 50);
    ctx.lineTo(50, 100);

    ctx.strokeRect(100.5, 125.5, 49, 49);

    ctx.lineTo(100, 50);

    ctx.fillRect(50, 125, 50, 50);

    ctx.lineTo(50, 0);

    ctx.clearRect(50, 125, 100, 50);

    ctx.lineTo(0, 50);
    ctx.stroke();
</script>
</body>
</html>


gradient:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="300" height="200" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var g = ctx.createLinearGradient(0, 0, 300, 0);
    g.addColorStop(0, '#000');
    g.addColorStop(1 / 7, '#00f');
    g.addColorStop(2 / 7, '#0f0');
    g.addColorStop(3 / 7, '#0ff');
    g.addColorStop(4 / 7, '#f00');
    g.addColorStop(5 / 7, '#f0f');
    g.addColorStop(6 / 7, '#ff0');
    g.addColorStop(1, '#fff');
    ctx.fillStyle = g;
    ctx.fillRect(0, 0, 300, 200);
</script>
</body>
</html>


gradient2:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="300" height="200" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var g1 = ctx.createLinearGradient(0, 0, 300, 200);
    g1.addColorStop(0.0, 'rgba(0, 255, 0, 0.0)');
    g1.addColorStop(1.0, 'rgba(0, 255, 0, 1.0)');

    var g2 = ctx.createLinearGradient(0, 0, 300, 200);
    g2.addColorStop(0.0, 'rgba(0, 255, 0, 1.0)');

    g2.addColorStop(1.0, 'rgba(0, 0, 0, 0.0)');
    ctx.fillStyle = g1;
    ctx.fillRect(0, 0, 300, 100);
    ctx.fillStyle = g2;
    ctx.fillRect(0, 100, 300, 100);
</script>
</body>
</html>


linewidth:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.strokeStyle = 'black';
    ctx.lineWidth = 1;
    for (var i = 0; i < 100; i++) {
        ctx.beginPath();
        ctx.moveTo(49 + i / 100, i);
        ctx.lineTo(49 + i / 100, i + 1);
        ctx.closePath();
        ctx.stroke();
    }

    for (var i = 0; i < 100; i++) {
        ctx.beginPath();
        ctx.moveTo(i, 49 + i / 100);
        ctx.lineTo(i + 1, 49 + i / 100);
        ctx.closePath();
        ctx.stroke();
    }
</script>
</body>
</html>


overflow:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillStyle = 'blue';
    ctx.fillRect(-50, -50, 100, 100);

    ctx.fillStyle = 'green';
    ctx.fillRect(50, 50, 100, 100);

    ctx.strokeStyle = 'black';
    ctx.strokeRect(0, 0, 100, 100);
</script>
</body>
</html>


quadraticcurve:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.save();

    ctx.strokeStyle = 'black';
    ctx.lineWidth = 1;
    ctx.beginPath();
    ctx.moveTo(50, 50);
    ctx.quadraticCurveTo(0, 0, 25, 75);
    ctx.quadraticCurveTo(50, 0, 50, 50);
    ctx.stroke();

    ctx.restore();

    ctx.save();

    ctx.translate(-56, -24);
    ctx.scale(3.5, 1.5);
    ctx.strokeStyle = '#ddd';
    ctx.lineWidth = 1;
    ctx.beginPath();
    ctx.moveTo(50, 50);
    ctx.quadraticCurveTo(0, 0, 25, 75);
    ctx.quadraticCurveTo(50, 0, 50, 50);
    ctx.stroke();

    ctx.restore();
</script>
</body>
</html>


resizing:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="200" height="200" style="border:1px solid #c3c3c3; background-color:#eee;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    var size = 80;
    var img = new Image();
    img.src = "http://ie.microsoft.com/testdrive/Graphics/CanvasPad/images/ie.png";

    f();

    function f() {
        size = (size + 1) % 800;
        cvs.width = Number(size + 200);
        cvs.height = Number((size + 200) / 2);

        ctx.save();
        ctx.translate(50, 50);
        ctx.scale(0.1, 0.1);
        ctx.rotate(size / 800 * Math.PI * 8);
        ctx.drawImage(img, 0, -75);
        ctx.restore();

        ctx.save();
        ctx.beginPath();
        ctx.moveTo(0, 0);
        ctx.lineTo(cvs.width, cvs.height);
        ctx.moveTo(20, 20);
        ctx.lineTo(80, 20);
        ctx.lineTo(80, 80);
        ctx.lineTo(20, 80);
        ctx.stroke();
        ctx.closePath();
        ctx.restore();

        ctx.save();
        ctx.beginPath();
        ctx.scale(size / 200, size / 200);
        ctx.arc(100, 50, 20, 0, Math.PI, true);
        ctx.fill();
        ctx.restore();

        setTimeout(f, 50);
    }
</script>
</body>
</html>


saverestorepath:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width="100" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(0, 50);
    ctx.lineTo(50, 100);

    ctx.save();
    ctx.lineTo(100, 50);
    ctx.restore();

    ctx.save();
    ctx.lineTo(50, 0);
    ctx.restore();

    ctx.save();
    ctx.lineTo(0, 50);
    ctx.restore();

    ctx.stroke();
</script>
</body>
</html>


stroke-scale-rotate:
<!doctype html>
<html>
<body >
<canvas id="myCanvas" width="200" height="200" style="border:1px solid #c3c3c3; background:#eee"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.save();

    ctx.translate(100.5, 100);
    ctx.lineWidth = 1;

    ctx.beginPath();
    ctx.moveTo(0, 0);
    ctx.lineTo(50, 0);
    ctx.scale(1, 2);
    ctx.rotate(Math.PI / 2);
    ctx.lineTo(25, -50)
    ctx.rotate(Math.PI / 2);
    ctx.lineTo(0, -25)
    ctx.scale(1, 2);
    ctx.closePath();
    ctx.stroke();

    ctx.restore();

    ctx.translate(50, 50);

    ctx.fillStyle = 'white';
    ctx.strokeStyle = 'blue';
    drawStar(ctx, 20);


    function drawStar(ctx, r) {
        ctx.save();

        ctx.beginPath();
        ctx.rotate(-Math.PI / 10);
        ctx.scale(r, r);
        ctx.moveTo(1, 0);
        ctx.lineWidth = ctx.lineWidth / r;

        for (var i = 0; i < 9; i++) {
            ctx.rotate(Math.PI / 5);
            if (i % 2 == 0) {
                ctx.lineTo(0.3819653016466596, 0);
            } else {
                ctx.lineTo(1, 0);
            }
        }
        ctx.closePath();
        ctx.fill();
        ctx.stroke();

        ctx.restore();
    }
</script>
</body>
</html>


stroke-should-not-close-path:
<!doctype html>
<html>
<body >
<canvas id="myCanvas" width="200" height="200" style="border:1px solid #c3c3c3; background:#eee"></canvas>
<script type="text/javascript">
    var cvs = document.getElementById("myCanvas");
    var ctx = cvs.getContext("2d");

    ctx.fillStyle = "#ccc";
    ctx.strokeStyle = "#000";

    ctx.beginPath();
    ctx.moveTo(30, 30);
    ctx.lineTo(150, 150);
    ctx.bezierCurveTo(60, 70, 60, 70, 70, 150);
    ctx.fill();
    ctx.stroke();
</script>
</body>
</html>


example1:
<!doctype html>
<html>
<head>
    <script type="text/javascript">
        var cvs, ctx;
        var particles = [];
        var NUM_PARTICLES = 20;

        function Particle() {
            this.x = Math.random() * cvs.width;
            this.y = Math.random() * cvs.height;

            this.xvel = Math.random() * 5 - 2.5;
            this.yvel = Math.random() * 5 - 2.5;
        }

        Particle.prototype.update = function () {
            this.x += this.xvel;
            this.y += this.yvel;

            this.yvel += 0.1;

            if (this.x > cvs.width || this.x < 0) {
                this.xvel = -this.xvel;
            }

            if (this.y > cvs.height || this.y < 0) {
                this.yvel = -this.yvel;
            }
        }

        function loop() {
            ctx.clearRect(0, 0, cvs.width, cvs.height);

            for (var i = 0; i < NUM_PARTICLES; i++) {
                particles[i].update();

                ctx.beginPath();
                ctx.moveTo(particles[i].x, particles[i].y);
                ctx.lineTo(particles[i].x - particles[i].xvel, particles[i].y - particles[i].yvel);
                ctx.stroke();
                ctx.closePath();
            }

            setTimeout(loop, 10);
        }

        function load() {
            cvs = document.getElementById("myCanvas");
            ctx = cvs.getContext("2d");

            for (var i = 0; i < NUM_PARTICLES; i++) {
                particles[i] = new Particle();
            }

            ctx.lineWidth = "2";
            ctx.strokeStyle = "rgb(255, 255, 255)";
            loop();
        }
    </script>
</head>
<body onload="load();" style="background-color:black; text-align:center;">
    <canvas id="myCanvas" width="400" height="300" style="border:1px solid #444;"></canvas>
</body>
</html>

共有 人打赏支持
粉丝 13
博文 2004
码字总数 14107
×
涂孟超
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: