我目前正在尝试在一个 div 的右下角和另一个 div 的右上角之间绘制一条对角线。如果可能的话,我想在没有 jQuery 的情况下做到这一点。这可能吗?
如何在两个div之间画一条线?
IT技术
javascript
html
2021-02-09 18:27:34
2个回答
由于 CSS 限制,这不适用于 IE8 或更低版本。
function getOffset( el ) {
var rect = el.getBoundingClientRect();
return {
left: rect.left + window.pageXOffset,
top: rect.top + window.pageYOffset,
width: rect.width || el.offsetWidth,
height: rect.height || el.offsetHeight
};
}
function connect(div1, div2, color, thickness) { // draw a line connecting elements
var off1 = getOffset(div1);
var off2 = getOffset(div2);
// bottom right
var x1 = off1.left + off1.width;
var y1 = off1.top + off1.height;
// top right
var x2 = off2.left + off2.width;
var y2 = off2.top;
// distance
var length = Math.sqrt(((x2-x1) * (x2-x1)) + ((y2-y1) * (y2-y1)));
// center
var cx = ((x1 + x2) / 2) - (length / 2);
var cy = ((y1 + y2) / 2) - (thickness / 2);
// angle
var angle = Math.atan2((y1-y2),(x1-x2))*(180/Math.PI);
// make hr
var htmlLine = "<div style='padding:0px; margin:0px; height:" + thickness + "px; background-color:" + color + "; line-height:1px; position:absolute; left:" + cx + "px; top:" + cy + "px; width:" + length + "px; -moz-transform:rotate(" + angle + "deg); -webkit-transform:rotate(" + angle + "deg); -o-transform:rotate(" + angle + "deg); -ms-transform:rotate(" + angle + "deg); transform:rotate(" + angle + "deg);' />";
//
// alert(htmlLine);
document.body.innerHTML += htmlLine;
}
- 距离公式
- 寻找两点的中心
- 找到两点之间的角度
- CSS 变换:旋转
- HTML 元素偏移量[Width|Height|Top|Left] 属性
编辑(对于其他有同样问题的人):
例如,如果您需要从不是右上角和右下角 div 的两个角创建一条线,请转到代码的这一部分:
// bottom right
var x1 = off1.left + off1.width;
var y1 = off1.top + off1.height;
// top right
var x2 = off2.left + off2.width;
var y2 = off2.top;
在您看到+ off1.width
和 的地方+ off1.height
,这意味着代码正在计算 div 底部或右侧的位置。删除+ off1.width
或+ off1.height
以获得 div 的左侧或顶部。
EDIT更新为更标准的 getOffset 函数。如果你想获得真正的肛门,你可能还需要添加 document.documentElement.client[Left/Top] 并遍历 offsetParent 树,但我认为 getBoundingClientRect() 和 window.page[X/Y]Offset 足以这样的例子。
有一种方法可以在没有 jQ 的情况下做到这一点。
- 使用偏移量查找 div 的位置。
- 找到斜率
1x1px
使用循环中的斜率从开始到结束位置绘制点。
其它你可能感兴趣的问题