如何使用jQuery Draggable和Droppable实现拖拽功能

 我来答
huanglenzhi
2015-01-10 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517192
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

  转载第一步:左侧元素可以拖

  官方给出的实例是直接在要拖动的元素上添加class="ui-widget-content"。最初我是在所有要拖动的元素都添加了“ui-widget-content”类别。但是测试拖动结果,发现元素只能在它所在的container里面拖动,再往右拖动,div会出现水平或垂直滚动条。不知道是不是自己在参数设置上不对。container设置了overflow:auto。

  效果如下图所示:

  因为最终的左侧元素节点是通过Ajax访问后台返回json数据,然后通过Javascript动态生成这种结构,而已不能为动态生成的元素绑定drag事件,也就不能调用draggable方法,所以我使用了一个称之“中间拖拽容易元素”,这div一直在页面上。只是默认不显示,只要用户开始拖拽左侧的元素时,它就出现了。当然这里需要自己手动添加很多代码。


  <div id='draggableDiv' class="ui-widget-content">
       
中间拖拽容器元素
    </div>
    <script
type="text/javascript">
       
$("#draggableDiv").draggable({
            containment:
"parent",
            drag: function (event, ui) { console.log("拖拽中");
},
            stop: function () { console.log("拖拽结束"); }
       
});
    </script>


第二步:将要拖的元素内容复制到draggableDiv上。实现拖动父节点时,其下面的子节点元素也要拖放到右边。如果是拖动的子节点元素,就在右边直接显示子节点元素。父节点和子节点是相对的,因为左侧树形结构的节点可以是无限级的,所以一个元素既可能是子节点元素,也会是父节点元素。通过监听鼠标的mousedown和mouseup事件,来判断用户在拖动元素。这步的原理如下图所示:



当用户拖动B节点时,首先把B元素上的内容复制给draggableDiv元素,当用户拖动B元素,其实是拖动draggableDiv元素。所以我们要计算出我们点击的B元素的位置,然后让draggableDiv在拖动时候显示正确的位置,然后拖动就是draggableDiv元素,用户看起来是拖动的B节点元素。


  var clickElement = null; $(".threepanels .ptreelist").bind("mousedown",function
(event) {
//获取当前mousedown元素的内容
var itemContent = $(this).html(); var
draggableDiv = $("#draggableDiv");
$(draggableDiv).css({ "display": "block",
"height": 0 });
//将点击的元素内容复制
clickElement = $(this).clone();
var
currentdiv = $(this).offset(); $(draggableDiv).css({ "top": currentdiv.top,
"left": currentdiv.left }); draggableDiv.trigger(event);
//取消默认行为 return
false; });
$("#draggableDiv").mouseup(function (event) { $(this).css({
"height": "0" }); });
//拖动元素时鼠标的位置
var dragDivLeft = 0;
var
dragDivTop = 0;
$("#draggableDiv").draggable({ containment: "parent", drag:
function (event, ui) { $("#draggableDiv").css({ "width": "260px", "height":
"22px" });
    $("#draggableDiv").append(clickElement);
    var closeTop
= $(".closeBar").offset().top;
    dragDivLeft = event.target.offsetLeft;

    dragDivTop = event.target.offsetTop; },
    stop: function () {

        //拖拽结束,将拖拽容器内容清空
        $("#draggableDiv").html("");

        $("#draggableDiv").css({"height":"0"}); }
});


第三步:右边的元素可以放到指定的位置上
需要将元素拖到指定的区域里面,然后释放操作。完成“放”的操作。可以从上图看出,我是将元素的上边左边和下边缘的左边存到一个数组里面。然后在“拖”的过程中,一直记录了拖动的左边,放到右侧时,就可以判断当前元素将要放的位置。具体可以下载代码查看。
完成代码之后的效果图如下:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式