如何知道任何 x 或 y 点是否在 svg 路径上

shyam_

我有一个 svg 路径,我想知道我的鼠标是否在 svg 路径上,如果是,我想将光标更改为鼠标到指针。

这可以通过在路径上添加鼠标悬停属性轻松完成,并且使用此解决方案识别点(x,y)在 svg 路径内部或外部

但有一个转折,我在它上面有另一个透明层,因此我不能有这两种解决方案。

现在我正在让顶层不显示并且它工作正常。但正因为如此,我的鼠标指针和我做的动作(例如在鼠标移动时移动某个元素)很慢,

因此,我想知道是否还有其他更好的方法而不使 display 等于 none。

请找到小提琴示例,我想在 mypath 元素上将光标更改为指针,并且还希望 myline 在我将鼠标移到图层上时应该移动,我可以暂时在图层上不显示,但我注意到firefox,线条移动不是那么流畅,

https://jsfiddle.net/shyam_bhiogade/9a7zuou2/6/

<svg width="400" height="400">
  <g>
    <path id="mypath" d="M10 200 L200 90 L200 200" fill="transparent" stroke="black" stroke-width="5" />
    <rect class="interactiveArea" width="500" height="500" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0);opacity:0.2" />
    <line id="myline" x1="20" y1="0" x2="20" y2="400" stroke-width="2" stroke="black" />
  </g>
</svg>
shyam_

我已经使用了https://bl.ocks.org/mbostock/8027637给出的解决方案,它返回 x 和 y 点与路径的距离,如果距离小于 1px 或笔画的宽度,我认为x 和 y 点在路径上。

   function closestPoint(pathNode, point) {
  var pathLength = pathNode.getTotalLength(),
      precision = 8,
      best,
      bestLength,
      bestDistance = Infinity;

  // linear scan for coarse approximation
  for (var scan, scanLength = 0, scanDistance; scanLength <= pathLength; scanLength += precision) {
    if ((scanDistance = distance2(scan = pathNode.getPointAtLength(scanLength))) < bestDistance) {
      best = scan, bestLength = scanLength, bestDistance = scanDistance;
    }
  }

  // binary search for precise estimate
  precision /= 2;
  while (precision > 0.5) {
    var before,
        after,
        beforeLength,
        afterLength,
        beforeDistance,
        afterDistance;
    if ((beforeLength = bestLength - precision) >= 0 && (beforeDistance = distance2(before = pathNode.getPointAtLength(beforeLength))) < bestDistance) {
      best = before, bestLength = beforeLength, bestDistance = beforeDistance;
    } else if ((afterLength = bestLength + precision) <= pathLength && (afterDistance = distance2(after = pathNode.getPointAtLength(afterLength))) < bestDistance) {
      best = after, bestLength = afterLength, bestDistance = afterDistance;
    } else {
      precision /= 2;
    }
  }

  best = [best.x, best.y];
  best.distance = Math.sqrt(bestDistance);
  return best;

  function distance2(p) {
    var dx = p.x - point[0],
        dy = p.y - point[1];
    return dx * dx + dy * dy;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在svg路径上获取点的y坐标

来自分类Dev

识别点(x,y)在svg路径之内或之外

来自分类Dev

围绕点x,y的SVG矩阵变换

来自分类Dev

围绕点x,y的SVG矩阵变换

来自分类Dev

如何遍历点(x,y)上的有序方向?

来自分类Dev

使用JavaScript从任意SVG路径提取x,y坐标

来自分类Dev

“ stroke-dasharray:x,y;” 弄乱了svg路径?(铬合金)

来自分类Dev

计算圆SVG内路径终点的x和y

来自分类Dev

画布路径上的随机点(来自SVG的路径)

来自分类Dev

画布路径上的随机点(来自SVG的路径)

来自分类Dev

svg 中是否存在变换矩阵,因此 x 变为 y,y 变为 x?

来自分类Dev

如何计算路径上的点?

来自分类Dev

如何计算路径上的点?

来自分类Dev

是否可以在知道X ^ Y和X + Y的情况下求解X和Y?

来自分类Dev

如何使用 Path2D(或任何形状抽屉)在 Java 中绘制 SVG 路径点?

来自分类Dev

如何提取svg图像的笛卡尔坐标(x,y)?

来自分类Dev

如何在svg符号中表示x和y

来自分类Dev

如何使SVG中心浮于点上

来自分类Dev

SVG折线使Y点更大

来自分类Dev

JavaFX 如何使用鼠标光标从图表上的绘制点获取 (x, y) 坐标?

来自分类Dev

是否有任何在线工具可以测试SVG路径?

来自分类Dev

如何将点A(x,y2)处的点A(x,y)的像素设置为1?

来自分类Dev

如何在SVG路径元素上设置亮度

来自分类Dev

如何在svg路径上制作脉冲动画?

来自分类Dev

如何在完整的div而不是SVG路径上添加悬停?

来自分类Dev

如何检查两只海龟在海龟图形上是否具有相同的x,y坐标?

来自分类Dev

用CSS定位SVG X / Y坐标不能在iOS设备上使用?

来自分类Dev

SVG:在同一(x,y)上创建2个矩形会产生不必要的边框

来自分类Dev

用CSS定位SVG X / Y坐标不能在iOS设备上使用?

Related 相关文章

  1. 1

    在svg路径上获取点的y坐标

  2. 2

    识别点(x,y)在svg路径之内或之外

  3. 3

    围绕点x,y的SVG矩阵变换

  4. 4

    围绕点x,y的SVG矩阵变换

  5. 5

    如何遍历点(x,y)上的有序方向?

  6. 6

    使用JavaScript从任意SVG路径提取x,y坐标

  7. 7

    “ stroke-dasharray:x,y;” 弄乱了svg路径?(铬合金)

  8. 8

    计算圆SVG内路径终点的x和y

  9. 9

    画布路径上的随机点(来自SVG的路径)

  10. 10

    画布路径上的随机点(来自SVG的路径)

  11. 11

    svg 中是否存在变换矩阵,因此 x 变为 y,y 变为 x?

  12. 12

    如何计算路径上的点?

  13. 13

    如何计算路径上的点?

  14. 14

    是否可以在知道X ^ Y和X + Y的情况下求解X和Y?

  15. 15

    如何使用 Path2D(或任何形状抽屉)在 Java 中绘制 SVG 路径点?

  16. 16

    如何提取svg图像的笛卡尔坐标(x,y)?

  17. 17

    如何在svg符号中表示x和y

  18. 18

    如何使SVG中心浮于点上

  19. 19

    SVG折线使Y点更大

  20. 20

    JavaFX 如何使用鼠标光标从图表上的绘制点获取 (x, y) 坐标?

  21. 21

    是否有任何在线工具可以测试SVG路径?

  22. 22

    如何将点A(x,y2)处的点A(x,y)的像素设置为1?

  23. 23

    如何在SVG路径元素上设置亮度

  24. 24

    如何在svg路径上制作脉冲动画?

  25. 25

    如何在完整的div而不是SVG路径上添加悬停?

  26. 26

    如何检查两只海龟在海龟图形上是否具有相同的x,y坐标?

  27. 27

    用CSS定位SVG X / Y坐标不能在iOS设备上使用?

  28. 28

    SVG:在同一(x,y)上创建2个矩形会产生不必要的边框

  29. 29

    用CSS定位SVG X / Y坐标不能在iOS设备上使用?

热门标签

归档