jQuery draggable: перетаскиваемое перетаскивание только на одном - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть приложение с некоторыми возможностями перетаскивания и перетаскивания, и я хочу сделать для одного типа перетаскивания (с данным классом) это перетаскивание можно отбросить только для одного типа перетаскивания.

Проблема в том,что это зависит от класса, в начале можно перетаскивать перетаскиваемый элемент в моей сетке повсюду:

 $('.grid-drop').droppable({
        accept: '.block',
        hoverClass: 'hovered',
        drop: handlePublishBlock
 });

Итак, когда я начинаю перетаскивать свой элемент, я изменяю принятие своей сетки следующим образом:

$('.grid-drop').droppable({
       accept: '.unknown-class',
       hoverClass: 'hovered',
       drop: handlePublishBlock
});

Но, похоже, это не работает, я все еще могу перетащить свой элемент на сетку.

Что я хочу сделать, так это то, что элемент с этим классом можно перетаскивать только на одну каплю, а после этого его нельзя перетаскивать в другой раз, поэтому вот мой фактический код:

 $(".draggable-one")
        .mousedown(function() {
            $('.grid-drop').droppable({
                accept: '.unknown-class',
                hoverClass: 'hovered',
                drop: handlePublishBlock
            });

            console.log("mousedown");
            isDragging = false;
        })
        .mousemove(function() {
            console.log("mousemove");
            isDragging = true;
        })
        .mouseup(function() {
            console.log("mouseup");
            var wasDragging = isDragging;
            isDragging = false;
            if (wasDragging) {

                $('.grid-drop').droppable({
                    accept: '.block',
                    hoverClass: 'hovered',
                    drop: handlePublishBlock
                });


                $(this).draggable('disable');
                $(this).removeClass('block-draggable');
            }
        });

Когда я начинаю перетаскивать, я отключаю перетаскивание в моей сетке (но, кажется, не работает), и когда я опускаю в другое поле, кроме сетки (есть только одно другое поле), элемент не может быть перетащен в другой раз.Это работает, но отключение и повторное включение сетки не работает.

Кто-нибудь может мне помочь?Спасибо.

1 Ответ

0 голосов
/ 24 сентября 2018

Не видя вашего полного кода, трудно помочь.Я бы посоветовал что-то вроде этого:

$(function(){
  var $grid = $('.grid-drop').droppable({
    accept: '.block',
    hoverClass: 'hovered',
    drop: handlePublishBlock
  });
  var isDragging = false;
  $(".draggable-one").draggable({
    start: function(e, ui){
      $grid.droppable("option", "accept", ".draggable-one");
      console.log(e.type);
      isDragging = true;
    },
    stop: function(e, ui){
      $grid.droppable("option", "accept", ".block");
      console.log(e.type);
      isDragging = false;
    }
  });
});
...