【问题标题】:Draw line from one dot to another using mouse event使用鼠标事件从一个点画线到另一个点
【发布时间】:2016-02-17 00:26:48
【问题描述】:

如何使用 HTML5 画布用鼠标简单地将两个点连接到一条线?我会点击第一个点并拖动鼠标创建一条线,直到它连接到第二个点。 我一直在使用 x/y 偏移量来跟随鼠标,但画一条线是我需要帮助的地方。

数据数组是两个点

$scope.data = [
     [192,27]
    ,[183,55]
  ];


  function drawDot(event) {
      if(dragging){

            context.lineTo(event.offsetX, event.offsetY);
            context.stroke();
            context.beginPath();
            context.arc(event.offsetX, event.offsetY,5, 0, Math.PI*2);
            context.fill();
            context.beginPath();
            context.moveTo(event.offsetX, event.offsetY);

        }
    }

  function engage(){
      dragging = true;
      drawDot(event);
  }

  function disengage(){
      dragging = false;
      context.beginPath(); 
  }

function init(){
    canvas.addEventListener("mousedown",engage);
    canvas.addEventListener("mouseup",disengage);
    canvas.addEventListener("mousemove",drawDot,false);
}

【问题讨论】:

  • 我真的很想帮助这个人。但是您需要提供迄今为止尝试过的代码。当您提出这样的问题时,您只是在要求人们从头开始为您完成工作。

标签: html5-canvas


【解决方案1】:

我在这里看到了一些问题。看看我的例子。我相信这就是您正在寻找的。​​p>

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d")


var startX = 0;
var startY = 0;

  function drawDot(event) {
      if(dragging){
      context.clearRect(0,0,canvas.width, canvas.height)
      context.beginPath();
      context.moveTo(startX, startY);
      context.lineTo(event.offsetX, event.offsetY);
       context.arc(event.offsetX, event.offsetY,5, 0, Math.PI*2);
      context.stroke();
      context.closePath();
        }
    }

  function engage(event){
      dragging = true;
      startX = event.offsetX;
      startY = event.offsetY;
  }

  function disengage(){
      dragging = false;
  }


canvas.addEventListener("mousedown",engage);
canvas.addEventListener("mouseup",disengage);
canvas.addEventListener("mousemove",drawDot,false);
<canvas id="canvas" style="margin: 10px; background: blue"></canvas>

【讨论】:

  • 看起来这将对提问者有所帮助 :-) 您可能想要监听 mouseout 事件并使用disengage 处理。如果在绘图期间将鼠标释放到画布之外,这将防止线条“粘”在鼠标上。
  • 谢谢QBM5,太好了。
  • 在上述解决方案中,我如何能够从特定起点开始绘图?假设我想从 [x:50 y:60] 开始绘制我在这个位置有一个点并想从这个位置开始绘制
  • 只需手动将 startX 和 startY 设置为 event.offsetX/Y 以外的值,该行将从那里开始
  • 谢谢 我不确定这是否可能,从起点绘制平滑线,而不是根据您的解决方案绘制直线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2017-11-25
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多