从一个元素到另一元素画一条线

时间:2019-06-23 09:54:53

标签: javascript jquery html dom shapes

我想画一条可以设置样式的线条,该线条从<td>元素的中心位置开始,到另一个<td>元素的中心位置结束。


我已经尝试使用jQuery Connections plugin,但是它连接元素的边缘,而不是中心位置。

This plugin可以像这样工作:

$('#start').connections({
  to: '#end',
  'class': 'related'
});

我希望它以相同的方式工作。 (或类似方式)


此外,当我确实使用jQuery Connections plugin时,显然没有出现连接器线。

2 个答案:

答案 0 :(得分:1)

一种解决方案是在td中使用多余的项,并使用display flex和align center,如下所示:

<div>
  1
  <span class="line"></span>
</div>

然后:

div {
 display: flex;
 align-items: center;
 width: 100%;
}
.line {
  border-bottom: 1px solid #000;
  width: 100%;
  display: inline-block;
}

这里的工作示例,但是您需要根据需要对其进行调整,但是它应该可以完成工作:https://codepen.io/anon/pen/ewWgpV

答案 1 :(得分:0)

一段时间后,我终于找到了解决方案。在两个元素上使用getBoundingClientRect(),然后创建SVG线元素。 SVG固定在窗口的左上角,可以使用pointer-events: none;单击。

var b1 = document.getElementById('btn1').getBoundingClientRect();
var b2 = document.getElementById('btn2').getBoundingClientRect();
var newLine = document.createElementNS('http://www.w3.org/2000/svg', 'line');
newLine.setAttribute('id', 'line1');
newLine.setAttribute('x1', b1.left + b1.width / 2);
newLine.setAttribute('y1', b1.top + b1.height / 2);
newLine.setAttribute('x2', b2.left + b2.width / 2);
newLine.setAttribute('y2', b2.top + b2.height / 2);
newLine.setAttribute('style', 'stroke: black; stroke-width: 2;');
document.getElementById("fullsvg").append(newLine);
#btn1 {
  margin-left: 50px;
  margin-bottom: 5px;
}

#btn2 {
  margin-left: 150px;
}

#fullsvg {
  left: 0px;
  top: 0px;
  position: fixed;
  margin: 0;
  pointer-events: none;
}
<input type="button" id="btn1" class="btn" value="button1"><br>
<input type="button" id="btn2" class="btn" value="button2">
<svg id="fullsvg"></svg>