Как запретить `var перетаскивание` в зависимости от установленного флажка?

StackOverflow https://stackoverflow.com/questions/3220511

Вопрос

Mootools:Как разрешить и запретить var drag в зависимости от checkbox проверено или нет?

window.addEvent('domready',function() {
  var z = 2;
  $$('#dragable').each(function(e) {
    var drag = new Drag.Move(e,{
      grid: false,
      preventDefault: true,
      onStart: function() {
        e.setStyle('z-index',z++);
      }
    });
  });
});
function check(tag){
  if(tag.checked){
    //checkbox checked
    //How to Disallow Drag.Move for #dragable ?
    //Unfortunately so it does not work - drag.destroy(); drag.removeEvents();
  }else{
    //How to Allow Drag.Move for #dragable ?
  }
}
<input type="checkbox" onClick="check(this);">
<div id="dragable">Drag-able DIV</div>
Это было полезно?

Решение

Сохраните экземпляр Drag в MooTools Магазин элементов поэтому, когда флажок установлен, мы можем получить этот экземпляр и манипулировать им.

Перетащить.Переместить является продолжением базы Тащить class, и если вы посмотрите документацию, вы заметите, что у него есть два метода для этой ситуации:

Вам нужно вызвать эти методы для объекта перетаскивания, который создается при вызове new Drag.Move(..) чтобы включить или отключить перетаскивание.

Итак, сначала создайте объект перетаскивания, как вы уже это делаете:

var drag = new Drag.Move(e, {
    ...
});

А затем сохраните ссылку на это drag объект внутри хранилища элементов для последующего извлечения.

e.store('Drag', drag);

Вы можете использовать любой ключ, какой захотите — я использовал "Drag".

Затем позже в функции проверки извлеките объект перетаскивания и вызовите attach или detach на нем в зависимости от состояния флажка.

function check(elem) {
    var drag = elem.retrieve('Drag'); // retrieve the instance we stored before

    if(elem.checked) {
        drag.detach(); // disable dragging
    }
    else {
        drag.attach(); // enable dragging
    }
}

Увидеть свой пример изменен для работы этого флажка.

Кстати, если вы получаете элемент по идентификатору, вам не нужно использовать $$ поскольку в идеале должен быть только элемент с этим идентификатором. $$("#dragable") слишком избыточен и менее эффективен.Использовать document.id('dragable') или $("dragable") вместо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top