我想在这个问题的基础上进行扩展,该问题解释了如何使用SVG在两个div之间绘制箭头,但我不想手动定位箭头在div之间的位置。无论div在页面上的位置如何,我希望能够获取div1的右侧点,div2的左侧点,并在它们之间绘制箭头。
例如,如果HTML文件是这样的:
如果是这样的话,我会期望得到类似这样的东西: 另一方面,如果HTML文件是这样的
如果是这样的话,我会期望看到这个: 这是我根据评论所做出的代码。
但是这并没有把箭头画在我想要的地方,就像我在图片中展示的那样。非常感谢任何帮助!
例如,如果HTML文件是这样的:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<div><p>First div</p></div>
<div><p>Second div</p></div>
</body>
</html>
样式文件已经
div{
display: inline-block;
margin-right: 100px;
border-color: green;
border-width: 3px;
border-style: solid;
}
如果是这样的话,我会期望得到类似这样的东西: 另一方面,如果HTML文件是这样的
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<div><p>First div</p></div>
<br><br><br>
<div><p>Second div</p></div>
</body>
</html>
样式文件已经
div{
margin-right: 100px;
border-color: green;
border-width: 3px;
border-style: solid;
}
如果是这样的话,我会期望看到这个: 这是我根据评论所做出的代码。
var leftobj = document.getElementById("div1");
var rightobj = document.getElementById("div2");
var leftcoords = leftobj.getBoundingClientRect();
var rightcoords = rightobj.getBoundingClientRect();
var startx = leftcoords.right;
var endx = rightcoords.left;
var starty = (leftcoords.top + leftcoords.bottom) / 2;
var endy = (rightcoords.top + rightcoords.bottom) / 2;
var linepath = `M${startx},${starty} L${endx},${endy}`;
var arr = document.getElementById("arr1");
arr.setAttribute('d', linepath)
<div id="div1"><p>First div</p></div>
<div id="div2"><p>Second div</p></div>
<svg width="300" height="100">
<defs>
<marker id="arrow" markerWidth="13" markerHeight="13" refx="2" refy="6" orient="auto">
<path d="M2,2 L2,11 L10,6 L2,2" style="fill:black;" />
</marker>
</defs>
<path d="M30,150 L100,50" id="arr1"
style="stroke:black; stroke-width: 1.25px; fill: none;marker-end: url(#arrow);" />
</svg>