首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery可拖动元素相交

Jquery可拖动元素相交
EN

Stack Overflow用户
提问于 2013-07-29 21:33:37
回答 1查看 1.5K关注 0票数 0

我想如果拖拽的元素与任何可拖拽的元素相交,拖拽的项目会恢复原来的位置。对此有什么想法吗?

代码语言:javascript
复制
                $( "#MainContents div[name=draggable]" ).each(function() {
$( this ).draggable({containment: 'parent',
  scrollSpeed: 1000,
  cursor: "crosshair",
   scroll:true,
 disabled: DragDropState,
stop: function(event, ui) {
        var Stoppos = $(this).position();
        var parentPosition=$(this).parent().position();
        var CalculatedTop=Stoppos.top-parentPosition.top;
        var CalculatedLeft=Stoppos.left-parentPosition.left;
        }
    });
});
EN

回答 1

Stack Overflow用户

发布于 2013-07-30 20:02:00

你需要在拖动开始时记录它来自哪里,然后在拖动停止时检查它的覆盖。查看此jsfiddle example

简而言之,扩展可拖动选项数组以包括start,记录数据对象中的顶部/左侧位置,然后在stop上,检查DOM中的其他可拖动项,如果有匹配的项,则调用revert函数。

例如:

代码语言:javascript
复制
$( this ).draggable({
start: function() {
  var div = $(this);
        div.data('top', div.css('top'));
        div.data('left', div.css('left'));
},
containment: 'parent',
  scrollSpeed: 1000,
  cursor: "crosshair",
   scroll:true,
 disabled: DragDropState,
stop: function(event, ui) {
        var draggables = $('.ui-draggable');
        var div = $(this);
        var goHome = function () {
            div.css('left', div.data('left'));
            div.css('top', div.data('top'));
        };

        draggables.not(div).each(function () {
            var curr = $(this);
            var currPos = curr.position();
            var divPos = div.position();
            if (divPos.left >= currPos.left && divPos.left <= (currPos.left + curr.width())) {
                if (divPos.top >= currPos.top && divPos.top <= (currPos.top + curr.height())) {
                    goHome();
                }
            }
        });
    };
});

我很确定这就是你想要做的。顺便说一句,从这里你可以动画的还原函数,以便它优雅地返回到它的最后一个地方。

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

https://stackoverflow.com/questions/17925490

复制
相关文章

相似问题

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