2

我正在关注jQuery 可拖动项目的本指南

我唯一想念的是dragenterdragleaveCSS 的临时元素一起玩的事件。hoverClass当可拖动元素在它们上移动时,它只为可放置元素提供属性。如果我们需要更改其他元素的 CSS 怎么办?

当前代码如下所示:

$(".part").draggable({
    start: startDrag,
    stop: stopDrag,
    revert: true
});
$(".parts-action").droppable({
    accept: '.part',
    hoverClass: 'hovered',
    drop: handleDrop
});

除此之外,我需要类似的东西:

$(".wrapper").on('dragenter', function (e) {
    $(this).next(".parts-action").show();
});

$(".wrapper").on('dragleave', function (e) {
    $(this).next(".parts-action").hide();
});

draggable()但是在旁边使用时它不起作用。

我也试过:

$(".part").draggable({
    drag: handleDrag
})

function handleDrag(e, ui){
    /* how to know if active draggable is on some element other than droppable? */
}

这非常令人困惑,因为它与可拖放和可拖放相关!

4

1 回答 1

6

我不是 100% 确定我完全理解您的问题以及您需要做什么,但是如果您需要更改其他元素的 css,那么您可以使用overout事件处理程序。查看Droppable 的 jQueryUI 文档。您基本上想在事件触发时添加一个类over,并在事件触发时删除该类out

JSFIDDLE 演示

HTML

<div class="ui-widget-content part">
  <p>Drag me to my target</p>
</div>

<div class="ui-widget-header parts-action">
  <p>Droppable area 1</p>
</div>

<div class="ui-widget-header parts-action">
  <p>Droppable area 2</p>
</div>

<div class="ui-widget-header parts-action">
  <p>Droppable area 3</p>
</div>

CSS

.parts-action { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }    
.part { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }    
.parts-action-highlight { background: red; }

jQuery

$(function() {
    $( ".part" ).draggable();
    $( ".parts-action" ).droppable({
        accept: ".part",
        hoverClass: "ui-state-active",
        drop: function( event, ui ) {
            $(this)
              .addClass( "ui-state-highlight" )
              .find( "p" )
              .html( "Dropped!" );
        },
        over: function( event, ui ) {
            $(this)
               .siblings(".parts-action")
               .addClass("parts-action-highlight");
        },
        out: function( event, ui ) {
            $(this)
              .siblings(".parts-action")
              .removeClass("parts-action-highlight");
        }
    });
});

上面的大部分代码示例都取自 jQueryUI droppabe 示例,因此 ui-widget-XXX 类不是必需的/与您无关,只是留下来突出显示效果。

只需将函数调用的主体替换为您需要采取的任何操作,例如

        over: function( event, ui ) {
            $(this)
               .siblings(".parts-action")
               .hide();
        },
        out: function( event, ui ) {
            $(this)
              .siblings(".parts-action")
              .show();
于 2013-05-27T04:24:55.517 回答