基于svg实现起点到终点的直线连接,线跟鼠标移动

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    #container {
      height: 300px;
      width: 100%;
      background-color: #ccc;
    }
  </style>
</head>
<body>
<div id="container">
  <div id="startPoint" style="position: absolute;left: 0;width: 100px;height: 20px;background-color: red">起点</div>
  <div id="endPoint" style="position: absolute;right: 0;width: 100px;height: 20px;background-color: gold">终点</div>
  <svg id="lineSVG" width="100%" height="100%" style="position: absolute; top: 0; left: 0; pointer-events: none;">
    <defs>
      <marker id="arrow" markerUnits="strokeWidth" markerWidth="12" markerHeight="12" viewBox="0 0 12 12" refX="6" refY="6" orient="auto">
        <path xmlns="http://www.w3.org/2000/svg" d="M2,2 L10,6 L2,10" style="fill: #000000;" />
      </marker>
    </defs>
    <line id="connectingLine" x1="0" y1="0" x2="0" y2="0" stroke="black" stroke-width="2" marker-end="url(#arrow)"/>
  </svg>
</div>
</body>
<script>

const startPoint = document.getElementById('startPoint');
  const endPoint = document.getElementById('endPoint');
  const connectingLine = document.getElementById('connectingLine');

  const container = document.getElementById('container');
  let isMouseOverEndPoint = false;

  container.onmousemove = function (e) {
    if(isMouseOverEndPoint) return
    const startCoords = startPoint.getBoundingClientRect();
    const endCoords = endPoint.getBoundingClientRect();

    const mouseX = e.clientX;
    const mouseY = e.clientY;

    let x1, y1, x2, y2;
    // 当鼠标到达终点时
    if (mouseX >= endCoords.left && mouseX <= endCoords.right && mouseY >= endCoords.top && mouseY <= endCoords.bottom) {
      isMouseOverEndPoint = true;
      x1 = startCoords.left + startCoords.width / 2;
      y1 = startCoords.top + startCoords.height / 2;
      x2 = endCoords.left + endCoords.width / 2;
      y2 = endCoords.top + endCoords.height / 2;
    } else {
      x1 = startCoords.left + startCoords.width / 2;
      y1 = startCoords.top + startCoords.height / 2;
      x2 = mouseX;
      y2 = mouseY;
    }
    connectingLine.setAttribute('x1', x1);
    connectingLine.setAttribute('y1', y1);
    connectingLine.setAttribute('x2', x2);
    connectingLine.setAttribute('y2', y2);
  };
</script>
</html>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值