<div class="container">
        <div class="block source" id="source">
            <img id="img1" draggable="true" src="https://uniform.wingzero.tw/assets/images/clothes_v3.png" alt="">
            <img id="img2" draggable="true" src="https://uniform.wingzero.tw/assets/images/clothes_v4.png" alt="">
        </div>
        <div class="position-relative" id="canvas-container">
            <canvas id="canvas" width="600" height="300"></canvas>
        </div>
      </div>
body{
            background: #ccc;
        }
        [draggable="true"] {
            cursor: move;
        }
        .source img{
            height: 200px;
        }
        .block{
            min-height: 200px;
        }
        canvas{
            border: 1px solid red;
        }
const canvas = new fabric.Canvas('canvas');
       
        function handleDragStart(e) {
            e.dataTransfer.setData('text/plain',event.target.id)
        }
        function handleDragEnd(e) {

        }
        function handleDragEnter(e){
            // e.stopPropagation(); 

        }
        function handleDragOver(e){
            e.preventDefault();
            e.dataTransfer.dropEffect = 'copy'; 
            return false;
        }
        function handleDragLeave(e){
            // e.stopPropagation(); 
        }
        function handleDrop(e){
            e.stopPropagation(); 
            let id = e.dataTransfer.getData('text/plain');
            var img = document.querySelector('#'+id);
            var newImage = new fabric.Image(img, {
                width: img.width,
                height: img.height,
                // Set the center of the new object based on the event coordinates relative
                // to the canvas container.
                left: e.layerX,
                top: e.layerY
            });
            canvas.add(newImage);
            return false;
        }
        var images = document.querySelectorAll('#source img');
    [].forEach.call(images, function (img) {
            img.addEventListener('dragstart', handleDragStart, false);
            img.addEventListener('dragend', handleDragEnd, false);
        });

        var canvasContainer = document.getElementById('canvas-container');
        canvasContainer.addEventListener('dragenter', handleDragEnter, false);
        canvasContainer.addEventListener('dragover', handleDragOver, false);
        canvasContainer.addEventListener('dragleave', handleDragLeave, false);
        canvasContainer.addEventListener('drop', handleDrop, false);

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/css/bootstrap.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.5.0/fabric.min.js