Остановка перетаскиваемого объекта от перетаскивания - PullRequest
0 голосов
/ 10 декабря 2011

Я сейчас работаю над плагином перетаскивания.Я хочу добавить функцию, чтобы пользователь мог ограничить количество перемещаемых объектов.Я назову эту функцию dragLimitation.

Это то, что я имею до сих пор:

var limit = 0;
                $(document).ready(function() {
                    $(oj).mouseup(function() {
                        if (o.dragLimitation !== false) {
                           if (limit > (o.dragLimitation-1)) {
                           //Code to Stop Drag Here
                            } else {
                                limit++;
                                $('#back').html(limit);
                            }
                        }

                    });
                });

О коде: Есть пара вещей, которые я хочу получитьясно, ребята, чтобы я мог получить ответ.

var, oj in: $(oj).mouseup(function() { просто относится к this.В этом случае this будет: $('#drag').jDrag();, что просто для запуска моего плагина.

#drag = this

Одна вещь, на которую я хочу обратить внимание, это o.dragLimitation.Это позволяет получить количество раз, когда перетаскиваемый элемент / объект может быть отброшен (mouseup).

Пример:

$('#drag').jDrag({
dragLimitation: 20
});

Это позволит #drag иметь возможность перетаскиванияи упал 20 раз.

Я получил много кода, но я просто не знаю, как остановить перетаскивание элемента.Я не нарушаю код, используя также:

$('body').append('<span>');

Таким образом, пользователи по-прежнему могут использовать оставшуюся часть страницы.

Вот где должен быть код для остановки перетаскивания:

if (limit > (o.dragLimitation - 1)) {
    //Code to Stop Drag Here
}

Я действительно надеюсь, что кто-то может помочь мне с подробностями, которые я дал.Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 10 декабря 2011
(function($) {
  $.extend($.fn, {
    jDrag: function() {
      var dragCount = this.data("jDrag.dragCount"),
          limitation = this.data("jDrag.limitation");

      if(typeof dragCount !== "number" || !isFinite(dragCount))
          {
            /*
             * Drag count isn't a valid number.
             * Give it a 0 value, and save it to the target.
             */

            dragCount = 0;
            this.data("jDrag.dragCount", dragCount);
          }

      if(typeof limiation !== "number" || !isFinite(limitation))
          {
            /*
             * Limitation isn't a valid number.
             * Load default limitation from plugin defaults.
             */

            limitation = $.data("jDrag.defaults").limitation;
          }

      if(dragCount <= limitation)
          {
            /*
             * Drag limitation isn't yet exceeded, increment count
             * and save it to the target.
             */

            this.data("jDrag.dragCount", ++dragCount);

            /* Continue code here. */
          }
    }
  });
})(jQuery);

См. Метод jQuery.data для внутреннего хранения данных для ваших плагинов.Как вы, вероятно, видите, приведенный выше код просто загружает количество раз, когда цель перетаскивается, и ограничение накладывается на цель.Если dragCount не является действительным числом, оно дает ему dragCount ноль (позже будет изменено на 1).Если ограничение не является допустимым числом, оно загружает ограничение плагина по умолчанию, сохраненное в данных плагина.

Обратите внимание, что мы использовали this.data, но позже мы использовали $.data.При использовании this.data эта информация сохраняется на конкретном элементе.Использование $.data загрузит данные для самого плагина.Поскольку мы используем this.data для хранения информации об определенном элементе, вы можете легко сохранять разные ограничения перетаскивания для разных элементов, вместо того, чтобы все они имели одинаковые ограничения.Если вы следуете этой схеме, у вас не должно возникнуть никаких проблем.

Примечание: Я не тестировал этот скрипт.Это просто базовая идея.


Обновление: Добавлены комментарии к коду для лучшего понимания.

0 голосов
/ 10 декабря 2011

Вам не обязательно нужен код , чтобы остановить функцию перетаскивания, вам нужно просто обернуть код для функции перетаскивания в , если , который проверяет, было ли соблюдено ограничение. Если он имеет, то код перетаскивания не будет выполняться.

...