首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery UI -将项目从拖放区域拖放回相同的拖放区域-不会触发拖放事件

jQuery UI -将项目从拖放区域拖放回相同的拖放区域-不会触发拖放事件
EN

Stack Overflow用户
提问于 2015-08-18 19:28:11
回答 1查看 1K关注 0票数 1

我有许多拖放区域$('.drophere')和一个可拖拽的$('.dragme')存储。每个拖放区域只能包含一个拖放的项目。

您可以将新项目放在已放置的项目上(替换)。您可以将项目从一个拖放区域拖到另一个拖放区域。

如果您开始从拖放区域拖动一个项目,并决定将其放回同一区域-不会触发拖放事件,因此被拖放的项目将丢失。

以下是简化的代码:

代码语言:javascript
复制
var draggedData;
$('.drophere').droppable({
  drop: function (event, ui) {
    $(this).attr('data-text', draggedData);
    $(this).draggable('enable');
  }
}).draggable({
  disabled: true,
  helper: "clone",
  start: function (event, ui) {
    draggedData = $(this).attr('data-text');
    $(this).attr('data-text', "").draggable('disable');
  }
});

$('.dragme').draggable({
  helper: "clone",
  start: function (event, ui) {
    draggedData = $(this).attr('data-text');
  }
});

这是jQuery UI droppable中的某种限制吗?有没有办法“忘记”这类拖拽物品的起源?谢谢。

刚刚添加:http://jsfiddle.net/gpnpwwbw/

EN

回答 1

Stack Overflow用户

发布于 2015-08-21 06:58:58

利用jQuery Draggables停止事件,我想出了以下解决方案:

代码语言:javascript
复制
    var draggedData,
    dropLastDragged
    startPosData = {};

function checkIntersect(posData){
    var left = startPosData.left,
        top = startPosData.top,
        right = startPosData.left+startPosData.width,
        bottom = startPosData.top+startPosData.height,
        cornerLeftPos = posData.left,
        cornerTopPos = posData.top;

        cornerLeftPos += startPosData.width/2;
        cornerTopPos += startPosData.height/2;

    if((cornerLeftPos > left && cornerLeftPos < right) && (cornerTopPos > top && cornerTopPos < bottom)){
        return true;    
    }
    return false;
}

$('.drophere').droppable({
  drop: function (event, ui) {
    dropLastDragged = false;
    $(this).html(draggedData);
    $(this).draggable('enable');
  }
}).draggable({
  disabled: true,
  helper: "clone",
  start: function (event, ui) {
    startPosData.left = ui.offset.left;
    startPosData.width = $(this).width();
    startPosData.top = ui.offset.top;
    startPosData.height = $(this).height();
    draggedData = $(this).html();
    $(this).html('Drop here').draggable('disable');
    dropLastDragged = this;
  },
  stop: function(event, ui) {
    if(dropLastDragged){
        if(checkIntersect(ui.offset)){
            $(dropLastDragged).html(ui.helper.html());
            $(dropLastDragged).draggable('enable');
        }
    }
  }
});

$('.dragme').draggable({
  helper: "clone",
  start: function (event, ui) {
    draggedData = $(this).html();
  }
});

Fiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32071155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档