JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.8.1/vis.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<div id="network"></div>
CSS
#network {
width: 600px;
height: 400px;
border: 1px solid lightgray;
}
JavaScript
var nodes = new vis.DataSet([
{id: 1, label: 'Node 1'},
{id: 2, label: 'Node 2'},
{id: 3, label: 'Node 3'},
{id: 4, label: 'Node 4'},
{id: 5, label: 'Node 5'}
]);
// create an array with edges
var edges = new vis.DataSet([
{from: 1, to: 3},
{from: 1, to: 2},
{from: 2, to: 4},
{from: 2, to: 5}
]);
// create a network
var container = $("#network");
var data = {
nodes: nodes,
edges: edges
};
var options = {
layout: {randomSeed: 2},
interaction:{
dragView: false,
multiselect: true
}
};
var network;
var canvas;
var ctx;
var rect = {}, drag = false;
var drawingSurfaceImageData;
function saveDrawingSurface() {
drawingSurfaceImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
}
function restoreDrawingSurface() {
ctx.putImageData(drawingSurfaceImageData, 0, 0);
}
function selectNodesFromHighlight() {
var fromX, toX, fromY, toY;
var nodesIdInDrawing = [];
var xRange = getStartToEnd(rect.startX, rect.w);
var yRange = getStartToEnd(rect.startY, rect.h);
var allNodes = nodes.get();
for (var i = 0; i < allNodes.length; i++) {
var curNode = allNodes[i];
var nodePosition = network.getPositions([curNode.id]);
var nodeXY = network.canvasToDOM({x: nodePosition[curNode.id].x, y: nodePosition[curNode.id].y});
if (xRange.start <= nodeXY.x && nodeXY.x <= xRange.end && yRange.start <= nodeXY.y && nodeXY.y <= yRange.end) {
nodesIdInDrawing.push(curNode.id);
}
}
network.selectNodes(nodesIdInDrawing);
}
function getStartToEnd(start, theLen) {
return theLen > 0 ? {start: start, end: start + theLen} : {start: start + theLen, end: start};
}
$(document).ready(function() {
container.on("mousemove", function(e) {
if (drag) {
restoreDrawingSurface();
rect.w = (e.pageX - this.offsetLeft) - rect.startX;
rect.h = (e.pageY - this.offsetTop) - rect.startY ;
...