当前位置: 首页 > 知识库问答 >
问题:

沿路径绘制画布

谭吉星
2023-03-14

我想在HTML5画布/或SVG上执行以下操作:

  1. 有一个背景路径,将光标移过去并绘制(填充)背景路径
  2. 用户完成绘图后有回调函数

我的问题是,我不知道如何检查抽屉线是否遵循路径。

有人能给我解释一下如何做到这一点,或者给我一些建议吗?

http://jsbin.com/reguyuxawo/edit?html,js,控制台,输出

function drawBgPath() {
  context.beginPath();
  context.moveTo(100, 20);

  context.lineTo(200, 160);
  context.quadraticCurveTo(230, 200, 250, 120);
  context.bezierCurveTo(290, -40, 300, 200, 400, 150);
  context.lineTo(500, 90);
  context.lineWidth = 5;
  context.strokeStyle = 'rgba(0,0,0,.2)';
  context.stroke();
}

共有1个答案

厉高逸
2023-03-14

>

  • 创建一个隐藏的画布,将源路径存储为问题画布,例如#q

    将问题画在c上。

    当用户即将绘制时,从问题中获取像素值,以查看其是否在一条线上。

    根据以上信息确定绘图颜色。

    var mousePressed = false;
    var lastX, lastY;
    var ctx;
    
    var canvas = document.getElementById('c');
    var context = canvas.getContext('2d');
    var canvasq = document.getElementById('q');
    var contextq = canvasq.getContext('2d');
    
    canvas.width = 500;
    canvas.height = 500;
    canvasq.width = 500;
    canvasq.height = 500;
    
       $('#c').mousedown(function (e) {
            mousePressed = true;
            Draw(e.pageX - $(this).offset().left, e.pageY - $(this).offset().top, false);
        });
    
        $('#c').mousemove(function (e) {
            if (mousePressed) {
                Draw(e.pageX - $(this).offset().left, e.pageY - $(this).offset().top, true);
            }
        });
    
        $('#c').mouseup(function (e) {
            mousePressed = false;
        });
    	    $('#c').mouseleave(function (e) {
            mousePressed = false;
        });
    
    function drawBgPath() {
      contextq.beginPath();
      contextq.moveTo(100, 20);
    
      contextq.lineTo(200, 160);
      contextq.quadraticCurveTo(230, 200, 250, 120);
      contextq.bezierCurveTo(290, -40, 300, 200, 400, 150);
      contextq.lineTo(500, 90);
      contextq.lineWidth = 5;
      contextq.strokeStyle = 'rgba(0,0,0,.2)';
      contextq.stroke();
      context.drawImage(canvasq, 0, 0);
    }
    
    function Draw(x, y, isDown) {
        // If not integer, getImageData will get a 2x2 region.
        x = Math.round(x);
        y = Math.round(y);
        if (isDown) {
            var pixel = contextq.getImageData(x, y, 1, 1);
            // If the canvas is not draw by line, the opacity value will be 0.
            var color = (pixel.data[3] === 0) ? 'red' : 'purple';
            context.beginPath();
            context.strokeStyle = color;
            context.lineWidth = 5;
            context.lineJoin = "round";
            context.moveTo(lastX, lastY);
            context.lineTo(x, y);
            context.closePath();
            context.stroke();
        }
        lastX = x; lastY = y;
    }
    
    drawBgPath();
    Draw();
    css prettyprint-override">#q {
      display: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <canvas id="c"></canvas>
    <canvas id="q"></canvas>

  •  类似资料:
    • 在地图“画区”工具里选择“沿路画区”,按照沿路节点标绘,会自动按照线路生成区划 每点击一个节点,自动计算距离 区划生成后,可以在右侧详情框填写信息,点击“保存”按钮保存,或者点击地图空白处保存

    • 2D 绘制上下文支持很多在画布上绘制路径的方法。通过路径可以创造出复杂的形状和线条。要绘制路径,首先必须调用beginPath()方法,表示要开始绘制新路径。然后,再通过调用下列方法来实际地绘制路径。 arc(x, y, radius, startAngle, endAngle, counterclockwise):以(x,y)为圆心绘制一条弧线,弧线半径为radius,起始和结束角度(用弧度表示

    • 下面的问题有人给我提示吗? 我想画一个填充的路径(画布),其中有一个洞。在SVG中,路径定义如下:

    • 所以我目前正在建立儿童涂色书应用程序。我想限制绘制区域,这样它只能在选定的区域绘制路径。例如,如果我触摸了喇叭,那么绘制区域只是喇叭边框内的空间。目前,我只能在位图中绘制路径(绘制区域不受限制)。 第一张图片:触摸区域。 第二张图片:用户只能在蓝色空间内绘制路径。 有没有什么办法让我可以使绘制区域限制在触摸/选定的区域?如有任何帮助,不胜感激,谢谢!

    • 问题内容: 我想只使用具有svg / canvas和jsmax的css来动画化线条的渐进绘图。我想画的线的想法可以在这里找到 问题答案: 此答案中列出了三种技术: 有一个全SVG解决方案,涉及逐步修改形状以绘制越来越长的“破折号”,然后是巨大的空白。 演示:[http](http://phrogz.net/svg/progressively-drawing-svg-path-via- dashar

    • 本文向大家介绍C#画笔Pen使用路径绘制图形的方法,包括了C#画笔Pen使用路径绘制图形的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#画笔Pen使用路径绘制图形的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。