- Draw connector from port
- Port drag
- Port tooltip
- Events
- See also
Contact Support
Ports interaction in EJ2 JavaScript Diagram control | Syncfusion®
4 Dec 202424 minutes to read
Draw connector from port
The port can be used to create connector by enabling Draw
constraints to the constraints
property. By default, the connector segment type is set to Orthogonal.
The following code explains how to draw the connector by using the port constraints.
var nodes = [
{
// Position of the node
id: 'node1',
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: { fill: '#6BA5D7', strokeColor: 'white' },
ports: [
{
offset: { x: 1, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Draw,
},
],
},
];
var connectors = [
{
id: 'connector1',
sourcePoint: { x: 100, y: 100 },
targetPoint: { x: 300, y: 120 },
type: 'Orthogonal',
ports: [
{
offset: 0.5,
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Draw,
},
],
},
];
// initialize Diagram component
var diagram = new ej.diagrams.Diagram(
{
width: '100%',
height: '600px',
nodes: nodes,
connectors: connectors,
},
'#element'
);
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/28.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Draw different connector types from port
You can change the default connector type while drawing the connector from the port by setting the specific connector type in connector defaults. This enables the drawing of various connector types from the port, including:
- Straight
- Bezier
- Orthogonal
The following code explains how to draw different connectors by using the port constraints.
var nodes = [
{
// Position of the node
id: 'node1',
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: { fill: '#6BA5D7', strokeColor: 'white' },
ports: [
{
offset: { x: 1, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Draw,
},
],
},
];
// initialize Diagram component
var diagram = new ej.diagrams.Diagram(
{
width: '100%',
height: '600px',
nodes: nodes,
getConnectorDefaults: function (connector) {
connector.type = 'Bezier';
return connector;
},
},
'#element'
);
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/28.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Port drag
The port drag feature allows users to click and drag a port using the mouse. This functionality can be enabled by setting the port constraints to “Drag”.
The following code explains how to enable port drag.
var nodes = [
{
// Position of the node
id: 'node1',
offsetX: 250,
offsetY: 250,
annotations: [{ content: 'Click and drag the port' }],
// Size of the node
width: 100,
height: 100,
style: { fill: '#6BA5D7', strokeColor: 'white' },
ports: [
{
offset: { x: 1, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Drag,
},
],
},
];
var connectors = [
{
id: 'connector1',
sourcePoint: { x: 100, y: 100 },
targetPoint: { x: 300, y: 120 },
type: 'Orthogonal',
ports: [
{
offset: 0.5,
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Drag,
},
],
},
];
// initialize Diagram component
var diagram = new ej.diagrams.Diagram(
{
width: '100%',
height: '600px',
nodes: nodes,
connectors: connectors,
},
'#element'
);
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/28.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Port tooltip
The port tooltip feature allows a tooltip to be displayed when hovering over a port. This functionality can be enabled by setting the port constraints to “Tooltip”.
The following code explains how to enable port tooltip.
var nodes = [
{
// Position of the node
id: 'node1',
offsetX: 250,
offsetY: 250,
annotations: [{ content: 'Hover over port to see tooltip' }],
// Size of the node
width: 100,
height: 100,
style: { fill: '#6BA5D7', strokeColor: 'white' },
ports: [
{
offset: { x: 1, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.ToolTip,
tooltip: { content: 'node port tooltip' },
},
],
},
];
var connectors = [
{
id: 'connector1',
sourcePoint: { x: 100, y: 100 },
targetPoint: { x: 300, y: 120 },
type: 'Orthogonal',
ports: [
{
offset: 0.5,
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.ToolTip,
tooltip: { content: 'connector port tooltip' },
},
],
},
];
// initialize Diagram component
var diagram = new ej.diagrams.Diagram(
{
width: '100%',
height: '600px',
nodes: nodes,
connectors: connectors,
},
'#element'
);
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/28.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
Events
There are several events that can be triggered while interacting with ports. These events are listed in the table below.
Event | Description |
---|---|
Click |
Triggers when the port is clicked. |
Element Draw |
Triggers when drawing a connector from the port. |
Position Change |
Triggers when the port is dragged. |
Connection Change |
Triggers when a connector is connected or disconnected from the port |
The following example shows how to get these events in diagram.
var nodes = [
{
// Position of the node
id: 'node1',
offsetX: 250,
offsetY: 250,
annotations: [
{ content: 'draw port', offset: { x: 0, y: 0.7 } },
{ content: 'drag port', offset: { x: 1, y: 0.7 } },
],
// Size of the node
width: 100,
height: 100,
style: { fill: '#6BA5D7', strokeColor: 'white' },
ports: [
{
id: 'p1',
offset: { x: 0, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Draw,
},
{
id: 'p2',
offset: { x: 1, y: 0.5 },
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Drag,
},
],
},
];
var connectors = [
{
id: 'connector1',
sourcePoint: { x: 100, y: 100 },
targetPoint: { x: 300, y: 120 },
type: 'Orthogonal',
annotations: [
{
content: 'draw port',
alignment: 'After',
displacement: { x: 0, y: 10 },
},
{
content: 'drag port',
alignment: 'After',
offset: 0.7,
displacement: { x: 0, y: 10 },
},
],
ports: [
{
id: 'p1',
offset: 0.5,
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Draw,
},
{
id: 'p2',
offset: 0.8,
visibility: ej.diagrams.PortVisibility.Visible,
constraints:
ej.diagrams.PortConstraints.Default |
ej.diagrams.PortConstraints.Drag,
},
],
},
];
// initialize Diagram component
var diagram = new ej.diagrams.Diagram(
{
width: '100%',
height: '600px',
nodes: nodes,
connectors: connectors,
click: function (args) {
console.log('clicked');
//customize
},
elementDraw: function (args) {
//Prevents connector drawn from connector port
if (
args.state === 'Start' &&
args.source instanceof ej.diagrams.Connector
) {
args.cancel = true;
}
//customize
},
positionChange: function (args) {
console.log('Position change');
//customize
},
connectionChange: function (args) {
console.log('Connection change');
//customize
},
},
'#element'
);
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/28.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>