I'm currently working on a way to create a single-line diagram using Javascript. I'm currently able to connect two html elements using the following function:
adjustLine (from, to, line) {
var fT = from.offsetTop + from.offsetHeight/2;
var tT = to.offsetTop + to.offsetHeight/2;
var fL = from.offsetLeft + from.offsetWidth/2;
var tL = to.offsetLeft + to.offsetWidth/2;
var CA = Math.abs(tT - fT);
var CO = Math.abs(tL - fL);
var H = Math.sqrt(CA*CA + CO*CO);
var ANG = 180 / Math.PI * Math.acos( CA/H );
if(tT > fT){
var top = (tT-fT)/2 + fT;
}else{
var top = (fT-tT)/2 + tT;
}
if(tL > fL){
var left = (tL-fL)/2 + fL;
}else{
var left = (fL-tL)/2 + tL;
}
if(( fT < tT && fL < tL) || ( tT < fT && tL < fL) || (fT > tT && fL > tL) || (tT > fT && tL > fL)){
ANG *= -1;
}
top-= H/2;
line.style["-webkit-transform"] = 'rotate('+ ANG +'deg)';
line.style["-moz-transform"] = 'rotate('+ ANG +'deg)';
line.style["-ms-transform"] = 'rotate('+ ANG +'deg)';
line.style["-o-transform"] = 'rotate('+ ANG +'deg)';
line.style["-transform"] = 'rotate('+ ANG +'deg)';
line.style.top = top+'px';
line.style.left = left+'px';
line.style.height = H + 'px';
}
The function takes 3 parameters:
- 1) the first html element
- 2) the second html element
- 3) the line that connects the elements.
This works fine and outputs the following result:
However, the lines that connect the html elements are a straight line, I would like to have a more natural flow for a diagram, something like the following:
Any advice on how I could go about doing this? Any help is greatly appreciated!
Edit
I'm using html2canvas to create an image of the generated output. This is my code:
var myDiv = document.getElementById('content');
html2canvas(myDiv, {useCORS: true, allowTaint : true}).then(function (canvas) {
var imgData = canvas.toDataURL("image/png", 1.0);
var imgData2 = canvas2.toDataURL("image/png", 1.0);
var pdf = new jsPDF('l', 'pt', [HTML_Width, HTML_Height]);
pdf.internal.scaleFactor = 30;
pdf.addImage(imgData, 'PNG', 0, 0, HTML_Width, HTML_Height);
pdf.addPage();
pdf.addImage(imgData2, 'PNG', 0, 0, HTML_Width_2, HTML_Height_2);
pdf.save("my_file.pdf");
});

