问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-11-26 19:23

我来回答

1个回答

热心网友 时间:2024-03-18 23:33

  在以前的文章中我已经介绍了web开发中基本拖放原理 现在给出需要完成的功能 最后运行的效果 如下图所示

   主要功能需求说明 左侧的元素结构最后会通过Ajax call服务器的数据来生成 能支持多级元素 父节点可以折叠起来

   用户可以通过拖放的操作 将元素从左侧拖放到右侧 如果是拖的父节点元素 那么需要把它子节点的元素一并拖到右边

   元素放到右侧 右侧可以接受元素的区域有 种可能 一种新建一个区域 就类似“华东交通大学”所示 另外一种就是拖放到已经有元素的区域 两者的关系是“或” 单个元素区域有“非”和“且”的关系 点击右边删除按钮可以删除节点元素

   第一步 左侧元素可以拖 官方给出的实例是直接在要拖动的元素上添加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) (); var draggableDiv = $("#draggableDiv"); $(draggableDiv) css({ "display": "block" "height": }); //将点击的元素内容复制 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": " " }); }); //拖动元素时鼠标的位置 var dragDivLeft = ; var dragDivTop = ; $("#draggableDiv") draggable({ containment: "parent" drag: function (event ui) { $("#draggableDiv") css({ "width": " px" "height": " px" });     $("#draggableDiv") append(clickElement);     var closeTop = $(" closeBar") offset() top;     dragDivLeft = event target offsetLeft;     dragDivTop = event target offsetTop; }     stop: function () {         //拖拽结束 将拖拽容器内容清空         $("#draggableDiv") ("");         $("#draggableDiv") css({"height":" "}); } }); lishixinzhi/Article/program/Java/JSP/201311/20005

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
南安椎间盘突出症的症状,悬壶邱腰神在陕西哪里 安康腰椎间盘突出一条腿麻保守治疗的方法,悬壶邱大夫的详细位置_百度知 ... 宣传片拍摄有哪些长处? 继承房产过户费用要多少? 继承5万房产过户需要多少费用多少钱 继承的房产过户需要多少费用 继承5万房产过户需要多少费用 灵芝茶减肥效果怎么样 南京滴滴和t3哪个收入多 属虎女人的和属鸡男人的配吗 怎样可以注册新的? 现在有没有那种不会复发的脱毛膏?或者类似的产品?我男生,今年... 肚子上长很多毛;很无语问了没有收获 小学生语文题5 如何在微信群里发微信红包接龙呢? 你好我的电锤刚买的,用了两天就不冲击了?钻时钻头顶出来后就回... 日本留考这个成绩能报什麽学校啊、32 有没有现在到晚上看电影的情侣,我想要一张双人今晚双人电影票照...2 2020独特的id有哪些?22 英文好听的名字有哪些? 英文有哪些?4 2020独特的数字字母有哪些?6 特殊意义的英文有哪些? 肚子上长很多毛;很无语问了没有收获 办公室有个同事天天带闷烧的粥,请问这个焖出来真的可以吃么? 如何做整体橱柜衣柜的销售,有何技巧及方法。业务怎样展开?98 临沂市手绘橱柜那有卖 白市驿南河水库可以钓鱼吗 小米四的手机有电池吗 小米手机1电池充不满 山药粥里有面碱能吃吗?14 山药粥可以放碱吗2 全面战争战锤31.2版本奸奇兵种改动一览 6开是多少钱 水晶虾仁是哪里的 10开是多少钱 今晚做的很绝 然后我把男朋友的衣服撕碎了 然后他要回家我就不... 做衣柜和橱柜用什么木板好?25 求:T-ara唱的HOLiDAY 中文歌词,谢喽…6 求t-ara&nbsp;holiday&nbsp;的中文歌词 歌手anna rossinelli唱的歌曲holiday的中... 现在有没有那种不会复发的脱毛膏?或者类似的产品?我男生,今年... 小米粥里能放碱面吗?20 处女座女朋友为什么从来不发我们一起的照片,分手后就发了和现男...2 根据反应历程推导出的反应速率方程中不应包含中间物种的浓度... 谁知道,手机看韩剧,也么才能找到国语版的1 DNF85级该去哪刷深渊?53 85版本剑魂刷什么深渊26 一个长方形的周长是30厘米,长比宽长3厘米这个长方形的长和宽各是多少... 245mm水钻用砖墙打磨钻头时是干打还是加水,干打要技巧吗,...9