android solution for suspension caused by continuous dragging

  • 2020-06-15 10:13:05
  • OfStack

When I keep dragging the object continuously sometimes after moving 5 or 6 drag/drop, see that sometimes without getting the object back I can't use it later.

Basically I have canvas on two object groups in time can have the largest two images not more than that, also see the image

Why does it happen and how can we prevent it?


(function () {
  var canvas = new fabric.Canvas('canvas');
  var canvas_el = document.getElementById('canvas');
  var canvas1 = new fabric.Canvas('canvas1');

  var group;
  fabric.Image.fromURL('img/blank.png', function (img) {
    var img1 = img.set({
      left: 0,
      top: 0
    });
    fabric.Image.fromURL('img/blank.png', function (img) {
      var img2 = img.set({
        left: 0,
        top: 0
      });
      group = new fabric.Group([img1, img2], {
        left: 0,
        top: 0
      });
      canvas.add(group)
    });
  });

  fabric.Image.fromURL('img/blank.png', function (img) {
    var img1 = img.set({
      left: 0,
      top: 0
    });
    fabric.Image.fromURL('img/blank.png', function (img) {
      var img2 = img.set({
        left: 0,
        top: 0
      });
      group1 = new fabric.Group([img1, img2], {
        left: 0,
        top: 0
      });
      canvas1.add(group1)
    });
  });

  $(document).ready(function () {

    /* Define drag and drop zones */
    var $drop = $('#canvas-drop-area,#canvas-drop-area1'),
      $gallery = $('td > #image-list li'),
      $draggedImage=null;

    /* Define the draggable properties */
    $gallery.draggable({
       helper: 'clone',
      start: function (e) {
      $draggedImage=event.target;
        $drop.css({
          'display': 'block'
        })
      },
      stop: function () {
        $(this).find('img').css({
          /* 'opacity': 0.4 */
        });
        $drop.css({
          'display': 'none'
        });
        $draggedImage=null;
      },
      revert: true
    });

    /* Define the events for droppable properties */
    $drop.droppable({
      over: function (event, ui) {
        $(this).addClass('active');
      },
      drop: function (event, ui) {
        var image =$draggedImage&& $draggedImage.src;
        console.log($draggedImage.alt);
        img_to_canvas(image,$draggedImage.alt,$(event.target).is("#canvas-drop-area")?1:2);
      },
      out: function (event, ui) {
        $(this).removeClass('active');
      },
      deactivate: function (event, ui) {
        $(this).removeClass('active');
      }
    });

  });
  var img_to_canvas = function(image,sendfront,checkcanvas) {
    var img = new Image();
    img.src = image;
    if(checkcanvas =='1'){
      if(sendfront=='top'){
        fabric.util.loadImage(img.src, function (img) {
          group.item(0).setElement(img);
            canvas.renderAll();
        }); 
      }else{
        fabric.util.loadImage(img.src, function (img) {
          group.item(1).setElement(img);
            canvas.renderAll();
        }); 
      }
      canvas.calcOffset(); 
    }else{
      if(sendfront=='top'){
        fabric.util.loadImage(img.src, function (img) {
          group1.item(0).setElement(img);
            canvas1.renderAll();
        });     
      }else{
        fabric.util.loadImage(img.src, function (img) {
          group1.item(1).setElement(img);
            canvas1.renderAll();
        }); 
      }
      canvas1.calcOffset();    
    }

  }
})();

The solution

To change the


$drop.droppable({
  over: function (event, ui) {
    $(this).addClass('active');
  },
  drop: function (event, ui) {
    var image =$draggedImage&& $draggedImage.src;

for


$drop.droppable({
    over: function(event, ui) {
      $(this).addClass('active');
    },
    drop: function(event, ui) {
      $draggedImage = ui.draggable.find("img").get(0);

This is the end of this article, I hope you enjoy it.


Related articles: