Я нарисовал коробки и изогнутые линии. Коробки перетаскиваются. Я пытаюсь уместить линии так, чтобы они менялись по размеру, куда бы они ни перетаскивались, в любую область, которой мне не удалось достичь. Моя цель - соединить А с В и C.
const coordinates = function() {
$(".line").each(function() {
const [box1, box2] = $(this).data("connect").split(',');
const $b1 = $(box1);
const $b2 = $(box2);
const x1 = $b1.offset().left + $b1.width()/2;
const y1 = $b1.offset().top + $b1.height()/2;
const x2 = $b2.offset().left + $b2.width()/2;
const y2 = $b2.offset().top + $b2.height()/2;
moveLine(x1, y1, x2, y2, $(this));
});
}
coordinates();
function moveLine(x1, y1, x2, y2, $line) {
var length = Math.sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
var transform = 'rotate(' + angle + 'deg)';
var offsetX = (x1 > x2) ? x2 : x1;
var offsetY = (y1 > y2) ? y2 : y1;
$line.css({
'position': 'absolute',
'-webkit-transform': transform,
'-moz-transform': transform,
'transform': transform
})
.width(length)
.offset({
left: offsetX,
top: offsetY
});
}
$('.box').draggable({
drag: coordinates
});
.box {
border: 1px solid black;
background-color: #ccc;
width: 100px;
height: 100px;
position: absolute;
}
#line1 {
top: 100px;
left: 50px;
/*transform: rotate(222deg);
-webkit-transform: rotate(222deg);
-ms-transform: rotate(222deg);*/
}
/* curved line*/
.line {
height:150px;
margin:10px 200px;
position:absolute;
overflow:hidden;
z-index:0;
--l:3px; /* Thickness of the curve */
--r:90px; /* The curve radius */
--w:55%; /* The width of the left part (i.e distance of the curve from the left) */
--c:red; /* Color of the curve*/
}
.line:before,
.line:after{
content:"";
position:absolute;
z-index:-1;
height:calc(50% - var(--l)); /* each one will take half the height minus border width*/
border-style:solid;
border-color:var(--c);
}
/* Left part */
.line:before {
bottom:0;
left:0;
width:var(--w);
border-width:0 var(--l) var(--l) 0; /* Right & Bottom*/
border-radius:0 0 var(--r) 0; /* Bottom-right*/
}
/* Right part*/
.line:after {
top:0;
right:calc(-1 * var(--l)); /* Move slightly to the right to have a perfect join */
width:calc(100% - var(--w));
border-width:var(--l) 0 0 var(--l); /* Top & Left */
border-radius:var(--r) 0 0 0; /* Top-Left*/
}
/* curved line end*/
/*straight line comment out*/
/* .line {
width: 1px;
height: 1px;
background-color: black;
position: absolute;
z-index: -1; put line behind the boxes
} */
#box1 {
top: 0;
left: 0;
}
#box2 {
top: 200px;
left: 0;
}
#box3 {
top: 200px;
left: 200px;
}
<div class="box" id="box1">A</div>
<div class="box" id="box2">B</div>
<div class="box" id="box3">C</div>
<div class="line" id="line" data-connect="#box1,#box2"></div>
<div class="line" id="line2" data-connect="#box1,#box3"></div>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
Я близко, но есть кое-что, что я не понимаю. Пожалуйста, помогите мне решить это. Иногда ящики также не могут перетаскивать, но если я закомментирую изогнутую линию css и не выделю прямую линию css, которая также записана в комментарии, ящики становятся гладкими dragabble.
Я также был бы признателен, если бы кто-нибудь использовал mathemati c способы решения этого, такие как кривая Безье cubi c.