当前位置:首页 > JavaScript

js 实现连线

2026-02-02 06:51:53JavaScript

使用 Canvas 实现连线

Canvas 提供了基础的绘图 API,可以通过 beginPathmoveTolineTo 方法绘制线段。以下是一个简单的示例:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

// 绘制一条从 (50, 50) 到 (200, 200) 的线段
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(200, 200);
ctx.strokeStyle = 'black';
ctx.stroke();

使用 SVG 实现连线

SVG 通过 <line> 元素直接支持线段绘制,属性包括起点 (x1, y1) 和终点 (x2, y2)

<svg width="300" height="300">
  <line x1="50" y1="50" x2="200" y2="200" stroke="black" stroke-width="2"/>
</svg>

动态创建 SVG 连线可通过 JavaScript 操作 DOM:

const svg = document.querySelector('svg');
const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
line.setAttribute('x1', '50');
line.setAttribute('y1', '50');
line.setAttribute('x2', '200');
line.setAttribute('y2', '200');
line.setAttribute('stroke', 'black');
svg.appendChild(line);

使用库简化连线逻辑

jsPlumb
适用于流程图、拓扑图等场景,支持拖拽、连线样式定制:

import { jsPlumb } from 'jsplumb';

jsPlumb.ready(() => {
  jsPlumb.connect({
    source: 'element1',
    target: 'element2',
    anchors: ['Right', 'Left'],
    connector: ['Straight']
  });
});

LeaderLine
专为元素间连线设计,支持动画和样式调整:

import LeaderLine from 'leader-line';

const line = new LeaderLine(
  document.getElementById('start'),
  document.getElementById('end'),
  { color: 'blue', dash: { animation: true } }
);

动态响应式连线

监听元素位置变化并更新连线坐标:

function updateLine() {
  const start = document.getElementById('start').getBoundingClientRect();
  const end = document.getElementById('end').getBoundingClientRect();

  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();
  ctx.moveTo(start.x + start.width/2, start.y + start.height/2);
  ctx.lineTo(end.x + end.width/2, end.y + end.height/2);
  ctx.stroke();
}

// 监听窗口变化或元素移动
window.addEventListener('resize', updateLine);

贝塞尔曲线连线

通过二次或三次贝塞尔曲线实现平滑连线:

js 实现连线

ctx.beginPath();
ctx.moveTo(50, 50);
ctx.quadraticCurveTo(150, 200, 250, 50); // 控制点 (150,200),终点 (250,50)
ctx.stroke();

数学公式描述(二次贝塞尔曲线):
$B(t) = (1-t)^2 P_0 + 2(1-t)t P_1 + t^2 P_2$
其中 $P_0$ 为起点,$P_1$ 为控制点,$P_2$ 为终点,$t \in [0,1]$。

标签: js
分享给朋友:

相关文章

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…