【问题标题】:Add CSS class to an element while dragging over w/ jQuery在使用 jQuery 拖动时将 CSS 类添加到元素
【发布时间】:2011-08-26 14:56:42
【问题描述】:

是否可以在元素被拖动到特定区域时为其添加 CSS 类,并在元素被拖放后替换该类?

我并不是在到处寻找这个功能,而只是在一个特定的区域。

【问题讨论】:

  • 结束时添加类,删除时删除并添加新类?
  • 您是否在使用 jQuery UI 库(具有可拖放交互)?
  • 是的,我使用拖放 jQuery UI。
  • @Ibrahim AshShohail。在开始拖动之前,我不需要任何课程。它必须只在特定区域上,class="targetArea"

标签: javascript jquery css


【解决方案1】:

是的,这当然是可能的。 jQuery UI 提供了一些方便的选项和事件来执行此操作。

对于初学者,可拖动元素总是可以在被拖动时由类 .ui-draggable-dragging 引用。

droppable 方法随后会提供一个名为over 的事件,只要将有效的可拖动对象悬停在它上面就会执行一个函数。因此,在该函数中,我们可以引用 .ui-draggable-dragging 并向其添加一个类。

Outdrop 事件也被提供,我们可以以相同的方式定位可拖动元素。下面是它的外观:

$("#droppable").droppable({
    // tolerance can be set to 'fit', 'intersect', 'pointer', or 'touch'
    tolerance: 'intersect',
    // Add .hoverClass whenever #draggable is being hovered over #droppable
    over: function(event, ui) {
        $('.ui-draggable-dragging').addClass('hoverClass');
    },
    // Remove .hoverClass whenever #draggable is no longer hovered over #droppable
    out: function(event, ui) {
        $('.ui-draggable-dragging').removeClass('hoverClass');
    },
    // Add .dropClass whenever #draggable is dropped on #droppable
    drop: function(event, ui) {
        $('.ui-draggable-dragging').removeClass('hoverClass').addClass('dropClass');
    }
});

上面的代码在#draggable#droppable 相交时添加一个类,然后在#draggable 被放到#droppable 时替换该类。此外,当两个元素不再相交时,.hoverClass 将被删除。这是working example on jsfiddle

希望对您有所帮助。

【讨论】:

  • 不错的答案。 mootools/jQuery 拖放击败了 HTML5 拖放中的所有喜欢的废话,以至于它甚至不值得弄乱 HTML5 的实现。
  • 没有jquery ui怎么解决?
【解决方案2】:

我发现使用回调提供的准备好的 ui 对象很有趣,因此您不必再次进行 dom 查询。每一点性能提升都是好的,尤其是在使用拖放时;-) ...

 over: function(e, ui) {
    $(ui.helper[0]).addClass("success");
  }

...

最好的。

【讨论】:

    【解决方案3】:

    我们不需要 jQuery UI。使用 jquery / javascript 我们可以添加删除类。

    我将展示我们如何在 JS 中做到这一点。

    考虑下面的html,

    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)" ondragenter="dragEnter(event)"></div>
    <br>
    <img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">
    

    在拖动开始时,

    function drag(ev) {
      ev.dataTransfer.setData("id", ev.target.id);
    }
    

    在拖动时,

      function dragEnter(event) {
            var id= ev.dataTransfer.getData("id");
            document.getElementById(id).classList.add("mycalss");
         }
    

    掉落时,

    function drop(ev) {
     ev.preventDefault();
     var id= ev.dataTransfer.getData("id");
     document.getElementById(id).classList.remove("mycalss");
     document.getElementById(id).classList.add("replacedclass");
    }
    

    【讨论】:

      【解决方案4】:

      没有尝试过,但我首先想到的是收集您希望它更改类的区域的 x,y 坐标、高度、宽度。然后,假设您可以获得被拖动对象的 x,y 坐标,当对象在这些范围内时,添加类,当在删除类之外。

      【讨论】:

      • 当有一个 jQuery 插件来做这一切时,为什么所有这些都可以工作? OP 确实提到了 jQuery...
      猜你喜欢
      • 2014-10-13
      • 2014-10-17
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2023-03-15
      • 2014-04-11
      • 2016-02-17
      • 2023-03-13
      相关资源
      最近更新 更多