亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

如何使用jQuery Draggable和Droppable實現拖拽功能

2019-11-20 22:33:56
字體:
來源:轉載
供稿:網友
在以前的文章中我已經介紹了web開發中基本拖放原理,現在給出需要完成的功能。最后運行的效果如下圖所示:

image

主要功能需求說明:
1.左側的元素結構最后會通過Ajax call服務器的數據來生成,能支持多級元素。父節點可以折疊起來

2.用戶可以通過拖放的操作,將元素從左側拖放到右側。如果是拖的父節點元素,那么需要把它子節點的元素一并拖到右邊

3.元素放到右側,右側可以接受元素的區域有2種可能。一種新建一個區域,就類似“華東交通大學”所示。另外一種就是拖放到已經有元素的區域。兩者的關系是“或”。單個元素區域有“非”和“且”的關系。點擊右邊刪除按鈕可以刪除節點元素。

第一步:左側元素可以拖
官方給出的實例是直接在要拖動的元素上添加class="ui-widget-content"。最初我是在所有要拖動的元素都添加了“ui-widget-content”類別。但是測試拖動結果,發現元素只能在它所在的container里面拖動,再往右拖動,div會出現水平或垂直滾動條。不知道是不是自己在參數設置上不對。container設置了overflow:auto。
效果如下圖所示:image

因為最終的左側元素節點是通過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事件,來判斷用戶在拖動元素。這步的原理如下圖所示:


image

當用戶拖動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"}); }
});

第三步:右邊的元素可以放到指定的位置上
需要將元素拖到指定的區域里面,然后釋放操作。完成“放”的操作??梢詮纳蠄D看出,我是將元素的上邊左邊和下邊緣的左邊存到一個數組里面。然后在“拖”的過程中,一直記錄了拖動的左邊,放到右側時,就可以判斷當前元素將要放的位置。具體可以下載代碼查看。
完成代碼之后的效果圖如下:
image

代碼下載:DragandDrop.rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女av一区二区| 日韩在线视频观看| 青青久久av北条麻妃黑人| 国产成人精品国内自产拍免费看| 日韩美女激情视频| 成人免费看片视频| 亚洲精品久久视频| 成人福利视频网| 色老头一区二区三区| 国产精品国产亚洲伊人久久| 国产精品午夜国产小视频| 国产一区二区三区丝袜| 欧美日韩不卡合集视频| 国产69精品久久久久99| 668精品在线视频| 国产精品久久久久久久久久久久久久| 97视频免费看| 97在线看免费观看视频在线观看| 欧美不卡视频一区发布| 国内外成人免费激情在线视频| 在线亚洲欧美视频| 欧美日韩在线一区| 亚洲国产天堂网精品网站| 国产精品老牛影院在线观看| 精品国产一区二区三区久久| 亚洲视频专区在线| 亚洲第一av网| 国产精品亚洲精品| 亚洲专区国产精品| 亚洲福利视频网| 国外色69视频在线观看| 中文字幕av一区二区三区谷原希美| 欧美成人亚洲成人| 亚洲免费视频一区二区| 亚洲人成在线电影| 51ⅴ精品国产91久久久久久| 欧美日韩午夜激情| 热久久免费视频精品| 亚洲精品国产精品自产a区红杏吧| 欧美老肥婆性猛交视频| 亚洲精品久久久久久久久久久久| 亚洲xxx大片| 久久久国产一区二区三区| 精品国产视频在线| 日韩高清av一区二区三区| 97精品国产91久久久久久| 久久久久久久久久国产| 久久夜色精品亚洲噜噜国产mv| 亚洲裸体xxxx| 日韩视频欧美视频| 久久久久久这里只有精品| 伊人久久久久久久久久久久久| 欧美国产亚洲精品久久久8v| 在线观看亚洲区| 成人精品一区二区三区电影免费| 日本成人激情视频| 久久激情五月丁香伊人| 国产精品电影网站| 日本视频久久久| 亚洲直播在线一区| 欧美激情一区二区三级高清视频| 亚洲精品国产综合区久久久久久久| 91在线中文字幕| 91日本在线视频| 亚洲国产私拍精品国模在线观看| 欧洲成人免费视频| 韩国三级日本三级少妇99| 国产视频精品一区二区三区| 中文字幕在线看视频国产欧美| 亚洲欧美日韩区| 日韩视频免费大全中文字幕| 2019中文字幕在线免费观看| 亚洲成人亚洲激情| 高清欧美电影在线| 亚洲欧美日韩另类| 中文.日本.精品| 亚洲福利在线播放| 久久久亚洲成人| 国产经典一区二区| 精品视频在线观看日韩| 欧美福利视频在线| 亚洲色图偷窥自拍| 国产精品久久久久久超碰| 亚洲激情在线观看| 欧美日韩一区二区精品| 日韩一区二区三区在线播放| 国产丝袜一区视频在线观看| 青青草国产精品一区二区| 国产精品1234| 精品福利一区二区| 欧美精品福利在线| 国产精品高潮呻吟久久av黑人| 26uuu日韩精品一区二区| 欧美另类极品videosbest最新版本| 91丨九色丨国产在线| 国产精品久久久久久av| 成人亚洲综合色就1024| 亚洲天堂第一页| 日韩精品亚洲精品| 色与欲影视天天看综合网| 欧洲成人性视频| 亚洲激情在线观看视频免费| 日韩美女在线观看一区| 日本免费一区二区三区视频观看| 国产69精品久久久久99| 精品国内产的精品视频在线观看| 国产亚洲欧美另类中文| 久久99精品视频一区97| 日本伊人精品一区二区三区介绍| 日韩欧美精品在线观看| 国产在线观看不卡| 亚洲无亚洲人成网站77777| 国产91ⅴ在线精品免费观看| 91网站在线免费观看| 97视频国产在线| 操人视频在线观看欧美| 日韩高清不卡av| 国产日本欧美一区二区三区| 韩国福利视频一区| 国产精品高清免费在线观看| 国产亚洲精品久久久优势| 欧美尺度大的性做爰视频| 91精品国产自产在线老师啪| 亚洲资源在线看| 激情久久av一区av二区av三区| 亚洲自拍偷拍网址| 亚洲在线视频观看| 在线日韩第一页| 日韩国产精品亚洲а∨天堂免| 日韩精品久久久久久久玫瑰园| 懂色aⅴ精品一区二区三区蜜月| 亚洲第一精品自拍| 日韩在线免费视频| 欧美激情区在线播放| 久久人体大胆视频| 久久人人爽人人爽人人片av高请| 久久天天躁狠狠躁夜夜爽蜜月| 久久久影视精品| 国产精品99久久久久久人| 成人av番号网| 色偷偷亚洲男人天堂| 日韩欧美精品网址| 日韩在线视频国产| 久久精视频免费在线久久完整在线看| 国内精久久久久久久久久人| 国产精品v片在线观看不卡| 91高清视频免费| 中文综合在线观看| 亚洲白虎美女被爆操| 亚洲无线码在线一区观看| 日韩精品福利在线| xxxxx91麻豆| 亚洲精品美女视频| 91久久久久久久久| 亚洲国产精品推荐| 精品久久久免费| 国产美女久久精品香蕉69| 欧美激情在线播放| 一本大道久久加勒比香蕉| 欧美中文字幕第一页| 国产精品aaaa| 成人黄色av网站| 国产午夜精品美女视频明星a级| 欧洲精品在线视频|