《canvas》之第4章 线条操作

130 篇文章 4 订阅
20 篇文章 2 订阅

第4章 线条操作

4.1 线条操作简介

  • 线条操作属性
属性说明
lineWidth定义线条宽度
lineCap定义线帽样式
lineJoin定义两个线条交接处样式
  • 线条操作方法
方法说明
setLineDash()定义线条的虚实样式

4.2 lineWidth属性

cxt.lineWidth = 整数;

默认1,默认单位px。

  • 线条宽度
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");

            //lineWidth值为5
            //cxt.beginPath();
            cxt.moveTo(20, 20);
            cxt.lineTo(180, 20);
            cxt.lineWidth = 5;
            cxt.stroke();

            //lineWidth值为10
            cxt.beginPath();
            cxt.moveTo(20, 70);
            cxt.lineTo(180, 70);
            cxt.lineWidth = 10;
            cxt.stroke();

            //lineWidth值为15
            cxt.beginPath();
            cxt.moveTo(20, 120);
            cxt.lineTo(180, 120);
            cxt.lineWidth = 15;
            cxt.stroke();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
  • 曲线宽度
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");

            cxt.arc(70, 70, 50, 0, -90 * Math.PI / 180, false);
            cxt.lineWidth = 5;
            cxt.stroke();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>

假设线条宽度lineWidth,strokeRect()方法绘制矩形实际宽度为width+lineWidth,实际高度为height+lineWidth,arc()方法绘制圆形的实际半径为radius+lineWidth。

4.3 lineCap属性

定义线条开始处和结尾处的线帽样式。

cxt.lineCap = "属性值";
属性值说明
butt无线帽,默认
round圆形线帽,半径为线宽一半
square正方形线帽,宽度为线宽一半
  • 线帽直线
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");

            cxt.lineWidth = 16;

            //lineCap值为默认值(butt)
            //cxt.beginPath();
            cxt.moveTo(20, 20);
            cxt.lineTo(180, 20);
            //cxt.lineCap = "butt";
            cxt.stroke();

            //lineCap值改为round
            cxt.beginPath();
            cxt.moveTo(20, 70);
            cxt.lineTo(180, 70);
            cxt.lineCap = "round";
            cxt.stroke();

            //lineCap值改为square
            cxt.beginPath();
            cxt.moveTo(20, 120);
            cxt.lineTo(180, 120);
            cxt.lineCap = "square";
            cxt.stroke();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
  • z
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");

            cxt.moveTo(50, 50);
            cxt.lineTo(100, 50);
            cxt.lineTo(50, 100);
            cxt.lineTo(100, 100);
            cxt.lineWidth = 12;
            cxt.lineCap = "round";
            cxt.stroke();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>

4.4 lineJoin属性

定义线条交接处的样式。

cxt.lineJoin = "属性值";
属性值说明
miter尖角,默认
round圆角,半径为线宽一半
bevel斜角,对角线为线宽
  • 直线交接样式
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");
			var yoffset = 100;

            cxt.lineWidth = 12;
			
            //cxt.beginPath();
            cxt.moveTo(50, 50);
            cxt.lineTo(100, 50);
            cxt.lineTo(50, 100);
            cxt.lineTo(100, 100);
            //cxt.lineJoin = "miter";
            cxt.stroke();
			
            cxt.beginPath();
            cxt.moveTo(50, 50+yoffset);
            cxt.lineTo(100, 50+yoffset);
            cxt.lineTo(50, 100+yoffset);
            cxt.lineTo(100, 100+yoffset);
            cxt.lineJoin = "round";
            cxt.stroke();
			
            cxt.beginPath();
            cxt.moveTo(50, 50+yoffset*2);
            cxt.lineTo(100, 50+yoffset*2);
            cxt.lineTo(50, 100+yoffset*2);
            cxt.lineTo(100, 100+yoffset*2);
            cxt.lineJoin = "bevel";
            cxt.stroke();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="350" style="border:1px dashed gray;"></canvas>
</body>
</html>

4.5 setLineDash()方法

定义线条的虚实样式。

cxt.setLineDash(array);

array是一个数组组合。

[10, 5]表示10px实线,5px空白,Chrome、Firefox支持setLineDash()方法,IE不支持。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
        function $$(id) {
            return document.getElementById(id);
        }
        window.onload = function () {
            var cnv = $$("canvas");
            var cxt = cnv.getContext("2d");

            cxt.strokeStyle = "red";
            cxt.setLineDash([10, 5]);
            cxt.strokeRect(50, 50, 80, 80);
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要清除Canvas上的特定线条,你需要重新绘制整个画布,但在绘制前,将你想要清除的线条之外的所有内容保存下来。以下是一个示例代码,清除特定线条的步骤: 1. 创建一个数组,用于保存所有要保留的线条。 2. 在Canvas上绘制所有要保留的线条。 3. 使用`clearRect`方法清除整个Canvas。 4. 在Canvas上重新绘制保留的线条。 以下是示例代码: ```javascript // 获取Canvas元素 var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); // 创建一个保存线条的数组 var linesToKeep = []; // 绘制所有要保留的线条 function drawLinesToKeep() { for (var i = 0; i < linesToKeep.length; i++) { var line = linesToKeep[i]; context.beginPath(); context.moveTo(line.startX, line.startY); context.lineTo(line.endX, line.endY); context.stroke(); } } // 清除特定线条 function clearSpecificLine(lineToRemove) { // 将要保留的线条保存到数组中 for (var i = 0; i < linesToKeep.length; i++) { var line = linesToKeep[i]; if (line !== lineToRemove) { linesToKeep.push(line); } } // 清除整个Canvas context.clearRect(0, 0, canvas.width, canvas.height); // 在Canvas上重新绘制保留的线条 drawLinesToKeep(); } // 示例用法 var line1 = { startX: 50, startY: 50, endX: 200, endY: 200 }; var line2 = { startX: 100, startY: 100, endX: 300, endY: 100 }; // 绘制线条 context.beginPath(); context.moveTo(line1.startX, line1.startY); context.lineTo(line1.endX, line1.endY); context.stroke(); context.beginPath(); context.moveTo(line2.startX, line2.startY); context.lineTo(line2.endX, line2.endY); context.stroke(); // 清除第一条线条 clearSpecificLine(line1); ``` 在上面的示例中,我们首先绘制了两条线条,然后使用`clearSpecificLine`函数清除了第一条线条。你可以根据需要调整和扩展这个示例来清除Canvas上的其他特定线条

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值