Advertisement
sourav8256

Untitled

Aug 4th, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.20 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);
  98. }
  99.  
  100. function onDrop(event) {
  101. event.preventDefault();
  102. var data = event.dataTransfer.getData("text/plain");
  103. var bpmElement = document.createElement('div');
  104. bpmElement.classList.add('bpm-element');
  105. bpmElement.innerText = data;
  106. bpmElement.style.left = (event.clientX - event.target.offsetLeft) + 'px';
  107. bpmElement.style.top = (event.clientY - event.target.offsetTop) + 'px';
  108.  
  109. // Add connector pins to the element
  110. var topPin = document.createElement('div');
  111. topPin.classList.add('connector-pin', 'top-pin');
  112. bpmElement.appendChild(topPin);
  113.  
  114. var bottomPin = document.createElement('div');
  115. bottomPin.classList.add('connector-pin', 'bottom-pin');
  116. bpmElement.appendChild(bottomPin);
  117.  
  118. var leftPin = document.createElement('div');
  119. leftPin.classList.add('connector-pin', 'left-pin');
  120. bpmElement.appendChild(leftPin);
  121.  
  122. var rightPin = document.createElement('div');
  123. rightPin.classList.add('connector-pin', 'right-pin');
  124. bpmElement.appendChild(rightPin);
  125.  
  126. event.target.appendChild(bpmElement);
  127.  
  128. // Make the newly added element draggable on the canvas
  129. bpmElement.addEventListener('mousedown', onElementDragStart);
  130. }
  131.  
  132. function onDragOver(event) {
  133. event.preventDefault();
  134. }
  135.  
  136. // Make the elements on the canvas draggable
  137. function onElementDragStart(event) {
  138. var target = event.target;
  139. var offsetX = event.clientX - target.getBoundingClientRect().left;
  140. var offsetY = event.clientY - target.getBoundingClientRect().top;
  141.  
  142. function onElementDrag(event) {
  143. target.style.left = (event.clientX - offsetX) + 'px';
  144. target.style.top = (event.clientY - offsetY) + 'px';
  145. }
  146.  
  147. function onElementDragEnd() {
  148. window.removeEventListener('mousemove', onElementDrag);
  149. window.removeEventListener('mouseup', onElementDragEnd);
  150. }
  151.  
  152. window.addEventListener('mousemove', onElementDrag);
  153. window.addEventListener('mouseup', onElementDragEnd);
  154. }
  155. </script>
  156. </body>
  157. </html>
  158.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement