canvas高级路径方法

接下来深入探讨一下其他绘制路径的方法,包括弧线和曲线,以组合成复杂的图像。

一、弧线

有4种函数可以绘制弧线和曲线,以组合成复杂的图像。

1.context.arc()

context.acr(x,y,radius,startAngle,endAngle,anticlockwise)

x和y定义圆心的位置 ,radius定义弧线的半径,startAngle,endAngle使用弧度值,而不是角度值。anticlockwise可以是true或是false这两个值,用于定义弧线的方向。

context.arc(100,100,20,(Math.PI/180)*0,(Math.PI/180)*360,false);

 圆弧示例完整代码如下:

<!DOCTYPE HTML>
<html lang="cn">

<head>
    <meta charset="utf-8">
    <title>canvans</title>
    <script src="modernizr-custom.js"></script>
    <script type="text/javascript">
        //检测window是否加载完毕最终的代码
        window.addEventListener('load', eventWindowLoaded, false);

        function eventWindowLoaded() {
            canvasApp();
        }

        //检测是否支持canvas
        //使用modernizr.js
        function canvasSupport() {
            return Modernizr.canvas;
        }

        //
        function canvasApp() {
            if (!canvasSupport()) {
                return;
            } else {
                var theCanvas = document.getElementById("canvas"); //创建画布实例
                var context = theCanvas.getContext("2d"); //获得2D上下文
            }
            drawScreen();

            function drawScreen() {
                context.beginPath();
                context.strokeStyle = 'black';
                context.lineWidth = 10;
                // context.arc(200, 200, 20, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);
                context.arc(200, 200, 20, (Math.PI / 180) * 0, (Math.PI / 180) * 90, false); //4分之一圆
                context.arc(200, 200, 20, (Math.PI / 180) * 0, (Math.PI / 180) * 270, false); //4分之三圆
                //整圆
                context.stroke();
                context.closePath();
            }
        }
    </script>
</head>

<body>

    <canvas id="canvas" width="500" height="400">
                Your browser does not support the canvas element.
    </canvas>

</body>

</html>

2.context.arcTo()

这个函数以给定的半径绘制一条弧线,圆弧的起点与当前路径的位置到(x1,y1)点的直线相切,圆弧的终点 与(x1,y1)到(x2,y2)的直线相切。

context.arcTo(350, 350, 100, 100, 20);

如下图:

完整案例代码如下:

<!DOCTYPE HTML>
<html lang="cn">

<head>
    <meta charset="utf-8">
    <title>canvans</title>
    <script src="modernizr-custom.js"></script>
    <script type="text/javascript">
        //检测window是否加载完毕最终的代码
        window.addEventListener('load', eventWindowLoaded, false);

        function eventWindowLoaded() {
            canvasApp();
        }

        //检测是否支持canvas
        //使用modernizr.js
        function canvasSupport() {
            return Modernizr.canvas;
        }

        //
        function canvasApp() {
            if (!canvasSupport()) {
                return;
            } else {
                var theCanvas = document.getElementById("canvas"); //创建画布实例
                var context = theCanvas.getContext("2d"); //获得2D上下文
            }
            drawScreen();

            function drawScreen() {
                context.beginPath();
                context.strokeStyle = 'black';
                context.lineWidth = 10;
                
                context.moveTo(0, 0);
                context.lineTo(100, 200);
                context.arcTo(350, 350, 100, 100, 20);
                
                context.stroke();
                context.closePath();

            }
        }
    </script>
</head>

<body>

    <canvas id="canvas" width="500" height="400">
                Your browser does not support the canvas element.
    </canvas>

</body>

</html>

3.贝塞尔曲线

 贝塞尔曲线要比弧线灵活得多,它有立方和平方两种形式

context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
context.quadraticCurveTo(cpx, cpy, x, y);
context.moveTo(0, 0);
context.quadraticCurveTo(100, 25, 0, 50);

这条曲线从(0,0)开始,到(0,50)结束,用来创建弧线位于(100,25),这个点大致上是圆弧的 圆心。控制点x值100弧线拉伸成一个细长的曲线。

简单平方贝赛尔曲线, 如下:

function drawScreen() {
                context.beginPath();
                context.strokeStyle = 'black';
                context.lineWidth = 10;

                context.moveTo(150, 0); // *
                context.bezierCurveTo(0, 125, 300, 175, 150, 300); // *



                context.stroke();
                context.closePath();

            }

3.canvas裁切区域

<!DOCTYPE HTML>
<html lang="cn">

<head>
    <meta charset="utf-8">
    <title>canvans</title>
    <script src="modernizr-custom.js"></script>
    <script type="text/javascript">
        //检测window是否加载完毕最终的代码
        window.addEventListener('load', eventWindowLoaded, false);

        function eventWindowLoaded() {
            canvasApp();
        }

        //检测是否支持canvas
        //使用modernizr.js
        function canvasSupport() {
            return Modernizr.canvas;
        }

        //
        function canvasApp() {
            if (!canvasSupport()) {
                return;
            } else {
                var theCanvas = document.getElementById("canvas"); //创建画布实例
                var context = theCanvas.getContext("2d"); //获得2D上下文
            }
            drawScreen();

            function drawScreen() {
                //在屏幕上画方块
                context.fillStyle = 'black';
                context.fillRect(10, 10, 200, 200);
                context.save();
                context.beginPath();

                //裁切画布从(0,0)点至50*50的正方形
                context.rect(0, 0, 50, 50);
                context.clip();

                //红色圈
                context.beginPath();
                context.strokeStyle = 'red';
                context.lineWidth = 5;
                context.arc(100, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);
                context.stroke();
                context.closePath();

                context.restore();

                //再次裁切整个画布
                context.beginPath();
                context.rect(0, 0, 500, 500);
                context.clip();

                //绘制没有裁切的蓝线
                context.beginPath();
                context.strokeStyle = "blue";
                context.lineWidth = 5;
                context.arc(100, 100, 50, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);
                //整圆
                context.stroke();
                context.closePath();
            }
        }
    </script>
</head>

<body>

    <canvas id="canvas" width="500" height="400">
                Your browser does not support the canvas element.
    </canvas>

</body>

</html>          

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值