美文网首页
Canvas<基础学习_03(绘制多条直线)>

Canvas<基础学习_03(绘制多条直线)>

作者: 誰在花里胡哨 | 来源:发表于2020-03-03 17:11 被阅读0次
效果图:
canvas_2.gif
代码如下:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        canvas {
            display: block;
            background: #dbdbdb;
            color: #1aa196;
        }
        .clear{
            position: fixed;
            top: 20px;
            right: 20px;
            color: coral;
            font-weight: bold;
            font-size: 20px;
            text-decoration: underline;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <span class="clear" onclick="clearCanvas()">清空画布</span>
    <canvas id="canvas"></canvas>
</body>
<script>
    let w = window.innerWidth;
    let h = window.innerHeight;
    let canvas = document.getElementById("canvas");
    canvas.width = w;
    canvas.height = h;
    let ctx = canvas.getContext("2d");

    let start_x, start_y;  //每次绘制直线的起始点
    let lineArray = [];   //储存绘制的直线数组

    //清空画布方法
    function clearCanvas() {
        ctx.clearRect(0, 0, w, h);
        lineArray = []
    }

    document.addEventListener("mousedown", mouse_down)
    document.addEventListener("mouseup", mouse_up)

    //鼠标按下方法
    function mouse_down(e) {
        start_x = e.clientX;
        start_y = e.clientY;
        console.log(e.clientX, e.clientY)
        console.log("鼠标按下")
        document.addEventListener("mousemove", mouse_move)
    }

    //鼠标移动方法
    function mouse_move(e) {
        //在鼠标移动绘制直线时,都要清除下画布,否则会有很多移动痕迹
        ctx.clearRect(0, 0, w, h);
        //此处是为绘制多条直线时,通过遍历之前绘制的直线,进而实现绘制多条直线的效果
        for (let i = 0; i < lineArray.length; i++) {
            draw_line(lineArray[i].startX, lineArray[i].startY, lineArray[i].endX, lineArray[i].endY)
        }
        draw_line(start_x, start_y, e.clientX, e.clientY)
    }

    //鼠标松开方法
    function mouse_up(e) {
        console.log(e.clientX, e.clientY)
        console.log("鼠标松开")
        //每次鼠标松开的时候,都会创建一个直线对象的相关属性,储存到 lineArray 里面
        lineArray.push(new draw_line(start_x, start_y, e.clientX, e.clientY))
        console.log(lineArray)
        //移除鼠标监听
        document.removeEventListener("mousemove", mouse_move)
    }

    //绘制线条的样式
    function draw_line(start_x, start_y, end_x, end_y) {
        this.startX = start_x;
        this.startY = start_y;
        this.endX = end_x;
        this.endY = end_y;
        ctx.beginPath();
        // 定义边框颜色
        ctx.strokeStyle = 'black'
        // 定义边框宽度
        ctx.lineWidth = 2;
        ctx.moveTo(start_x, start_y);
        ctx.lineTo(end_x, end_y);
        ctx.stroke();
        ctx.closePath();
    }
</script>

</html>

相关文章

  • Canvas<基础学习_03(绘制多条直线)>

    效果图: 代码如下:

  • android绘图之Canvas基础(2)

    Android 绘图学习 1 Canvas 基础 Canvas画布,用于绘制出各种形状配合画布的变幻操作可以绘制出...

  • Canvas 绘制七色板

    自己学习用学习Canvas时候 首先了解Canvas的坐标 基本格式 绘制直线 多边形 注意: 在没有用 cxt...

  • Quartz2D绘图

    标签: 裁剪、多边形、绘制图片、绘制文字、截图、曲线、扇形、椭圆、直线 绘图基本格式 一、绘制直线(虚线为多条直线...

  • canvas

    canvas动画思想 canvas 面向对象思想 绘制矩形、直线 填充矩形 矩形边框 擦除画布 绘制路径(逆时针绘...

  • Canvas使用方法总结

    引入Canvas标签 绘制直线 绘制矩形 绘制圆弧 绘制文本 绘制图片 我的github:https://gith...

  • Flutter自定义画板

    1. 绘制直线 绘制直线需要调用Canvas的drawLine方法,传入起点和终点坐标即可。 完整代码示例: 2....

  • HTML5中canvas使用

    1、Canvas基础 2、Canvas画直线 3、Canvas画矩形 4、Canvas画文字 5、Canvas画圆...

  • NFH.006 - Canvas高级与Chart.js

    12.16学习经验分享# Bruce_Zhu于2016.12.16 一、canvas-创建路径绘制线条(直线和折线...

  • Android 高级UI8 Canvas的使用

    Android 高级UI 目录 1.Canvas基本绘制 1.1drawLine 绘制直线 1.2drawLine...

网友评论

      本文标题:Canvas<基础学习_03(绘制多条直线)>

      本文链接:https://www.haomeiwen.com/subject/qrnhlhtx.html