Advertisement
sourav8256

Untitled

Aug 4th, 2023
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Simple BPM Canvas</title>
  5. <style>
  6. body {
  7. font-family: Arial, sans-serif;
  8. margin: 0;
  9. }
  10.  
  11. .left-panel {
  12. width: 100px;
  13. background-color: #f0f0f0;
  14. padding: 10px;
  15. float: left;
  16. }
  17.  
  18. .toolbar {
  19. margin-bottom: 10px;
  20. }
  21.  
  22. .toolbar div {
  23. width: 80px;
  24. height: 30px;
  25. border: 1px solid #ccc;
  26. background-color: #fff;
  27. margin-bottom: 10px;
  28. text-align: center;
  29. line-height: 30px;
  30. cursor: pointer;
  31. }
  32.  
  33. .canvas {
  34. width: 800px;
  35. height: 400px;
  36. margin: 20px auto;
  37. border: 1px solid #ccc;
  38. background-color: #f9f9f9;
  39. position: relative;
  40. }
  41.  
  42. .bpm-element {
  43. position: absolute;
  44. background-color: #b3e0ff;
  45. border: 1px solid #007fff;
  46. padding: 5px;
  47. cursor: pointer;
  48. display: flex;
  49. justify-content: center;
  50. align-items: center;
  51. }
  52.  
  53. .connector-pin {
  54. width: 10px;
  55. height: 10px;
  56. background-color: #007fff;
  57. border-radius: 50%;
  58. position: absolute;
  59. }
  60.  
  61. .top-pin {
  62. top: -5px;
  63. left: 50%;
  64. transform: translateX(-50%);
  65. }
  66.  
  67. .bottom-pin {
  68. bottom: -5px;
  69. left: 50%;
  70. transform: translateX(-50%);
  71. }
  72.  
  73. .left-pin {
  74. top: 50%;
  75. left: -5px;
  76. transform: translateY(-50%);
  77. }
  78.  
  79. .right-pin {
  80. top: 50%;
  81. right: -5px;
  82. transform: translateY(-50%);
  83. }
  84. </style>
  85. </head>
  86. <body>
  87. <div class="left-panel">
  88. <div class="toolbar">
  89. <div class="start-event" draggable="true" ondragstart="onDragStart(event)">Start</div>
  90. <div class="task" draggable="true" ondragstart="onDragStart(event)">Task 1</div>
  91. <div class="end-event" draggable="true" ondragstart="onDragStart(event)">End</div>
  92. </div>
  93. </div>
  94. <div class="canvas" id="canvas" ondrop="onDrop(event)" ondragover="onDragOver(event)"></div>
  95. <script>
  96. function onDragStart(event) {
  97. event.dataTransfer.setData("text/plain", event.target.innerText + "test");
  98.  
  99.  
  100. }
  101.  
  102. function onDrop(event) {
  103. event.preventDefault();
  104. var data = event.dataTransfer.getData("text/plain");
  105. var bpmElement = document.createElement('div');
  106. bpmElement.classList.add('bpm-element');
  107. bpmElement.innerText = data;
  108. bpmElement.style.left = (event.clientX - event.target.offsetLeft) + 'px';
  109. bpmElement.style.top = (event.clientY - event.target.offsetTop) + 'px';
  110.  
  111. // Add connector pins to the element
  112. var topPin = document.createElement('div');
  113. topPin.classList.add('connector-pin', 'top-pin');
  114. topPin.draggable = false;
  115. bpmElement.appendChild(topPin);
  116.  
  117. var bottomPin = document.createElement('div');
  118. bottomPin.classList.add('connector-pin', 'bottom-pin');
  119. bottomPin.draggable = false;
  120. bpmElement.appendChild(bottomPin);
  121.  
  122. var leftPin = document.createElement('div');
  123. leftPin.classList.add('connector-pin', 'left-pin');
  124. leftPin.draggable = false;
  125. bpmElement.appendChild(leftPin);
  126.  
  127. var rightPin = document.createElement('div');
  128. rightPin.classList.add('connector-pin', 'right-pin');
  129. rightPin.draggable = false;
  130. bpmElement.appendChild(rightPin);
  131.  
  132. event.target.appendChild(bpmElement);
  133.  
  134. // Make the newly added element draggable on the canvas
  135. bpmElement.addEventListener('mousedown', onElementDragStart);
  136. }
  137.  
  138. function onDragOver(event) {
  139. event.preventDefault();
  140. }
  141.  
  142. // Make the elements on the canvas draggable
  143. function onElementDragStart(event) {
  144. var target = event.target;
  145. var offsetX = event.clientX - target.getBoundingClientRect().left;
  146. var offsetY = event.clientY - target.getBoundingClientRect().top;
  147.  
  148. var target = event.target;
  149. if (target.classList.contains('connector-pin')) {
  150. return
  151. }
  152.  
  153. function onElementDrag(event) {
  154. target.style.left = (event.clientX - offsetX) + 'px';
  155. target.style.top = (event.clientY - offsetY) + 'px';
  156. }
  157.  
  158. function onElementDragEnd() {
  159. window.removeEventListener('mousemove', onElementDrag);
  160. window.removeEventListener('mouseup', onElementDragEnd);
  161. }
  162.  
  163.  
  164.  
  165. window.addEventListener('mousemove', onElementDrag);
  166. window.addEventListener('mouseup', onElementDragEnd);
  167. }
  168. </script>
  169. </body>
  170. </html>
  171.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement