H5拖动实现代码

原理以后有空再说现在嘛先上代码。。。。

 1 *{margin: 0;}
 2     html,body {
 3         width: 100%;
 4         height: 100%;
 5         margin: 0;
 6     }
 7     #dragBoxContainer{
 8         width: 150px;
 9         padding:10px;
10         background:#C1C4E0;
11     }
12     .dragBox{/* 拖动框 */
13         text-align: center;
14         background:#FFFFFF;
15         border: 1px solid #999999;
16         padding: 5px;
17         margin: 10px 0;
18         cursor: move;
19         word-break: break-word;
20         position: relative;
21     }
22     #dragPlaceholder{/* 占位符位 */
23         width: 150px;
24         height: 33px;
25         border:1px dotted red;
26     }
27     .dragHide{
28         /*
29         left: -9999px;
30         */
31         opacity: 0;
32         height: 0;
33         padding: 0;
34         margin: 0;
35     }
 1 <input type="button" value="添加" id="add">
 2 <p id="dragthis">拖动元素是:</p>
 3 <p>
 4     <span id="dragtarget">目标元素是:</span>
 5     <span id="dragtarget_Height">目标中间高度:</span>
 6 </p>
 7 <p id="mouseHeight">鼠标高度是:</p>
 8 <p id="Tips_placeholder">占位符位置在:</p>
 9 
10 <div id="dragBoxContainer"></div>
 1     var drag_this=null;//当前拖动的元素
 2     var drag_target=null;//悬停在那个元素
 3     var DOMnum=0;
 4     $("#add").click(function add(e){
 5         DOMnum++;
 6         $("#dragBoxContainer").append('<div class="dragBox" draggable="true" ondragstart="handleDrag(event)">00'+DOMnum+'</div>');
 7         var cols = document.querySelectorAll('.dragBox');
 8         [].forEach.call(cols, addDnDHandlers);
 9     });
10     function handleDrag(e){
11         e.dataTransfer.setData("Text"," ");//兼容火狐
12     };
13     function handleDragStart(e) {//(该方法只会触发一次)拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上
14         e = e || window.event;
15         var target = e.target || e.srcElement;
16         console.log("拖动元素瞬间触发");
17         drag_this=target
18         console.log(drag_this);
19         $("#dragthis").html("拖动元素是:"+target.innerHTML);
20         //$(target).addClass("dragHide");
21     };
22     function handleDragEnter(e) {//当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上
23         e = e || window.event;
24         var target = e.target || e.srcElement;
25         console.log("进入目标元素");
26         drag_target=target;
27         //console.log(target);
28         $("#dragtarget").html("目标元素是:"+target.innerHTML)
29         //$(target).addClass("www");
30     };
31     function handleDragOver(e) {//拖拽元素正在目标元素上移动的时候触发的事件,此事件作用在目标元素上
32         console.log("拖拽元素正在目标元素上移动");
33         if (!$(drag_this).hasClass("dragHide")) {
34             $(drag_this).addClass("dragHide");
35         }
36         //console.log({drag_this,drag_target});
37         //var this_top=$(drag_this).offset().top;
38         var target_top=$(drag_target).offset().top;//目标顶部高度
39         var target_height=$(drag_target).height()*.5;//目标高
40         //console.log({this_top,target_top});
41         //console.log(target_top);
42         var mouseHeight=e.pageY;//鼠标Y坐标
43         $("#mouseHeight").html("鼠标高度是:"+mouseHeight)
44         var judgeTop=target_top+target_height;//目标中间高度:
45         console.log(target_top,target_height,judgeTop)
46         $("#dragtarget_Height").html("目标中间高度:"+judgeTop)
47 
48         if(mouseHeight<=judgeTop){//
49             var dragPlaceholder=$(drag_target).prev("#dragPlaceholder");   
50             //console.log(dragPlaceholder)
51             if (dragPlaceholder.length==0) {
52                 $("#dragPlaceholder").remove();
53                 $(drag_target).before('<div id="dragPlaceholder">我是占位符位</div>')
54             }
55             $("#Tips_placeholder").html("占位符位置在:上")
56         }else{//
57             var dragPlaceholder=$(drag_target).next("#dragPlaceholder");   
58             if (dragPlaceholder.length==0) {
59                 $("#dragPlaceholder").remove();
60                 $(drag_target).after('<div id="dragPlaceholder">我是占位符位</div>')
61             }
62             $("#Tips_placeholder").html("占位符位置在:下")
63         }
64     };
65     function handleDragLeave(e) {
66         e = e || window.event;
67         var target = e.target || e.srcElement;
68         console.log("离开目标元素");
69     };
70     function handleDrop(e) {
71         console.log("被拖拽的元素在目标元素上同时鼠标放开触发的事件");
72     };
73     function handleDragEnd(e) {
74         console.log("鼠标释放了");
75         e = e || window.event;
76         var target = e.target || e.srcElement;
77         //console.log(target);
78 
79         $("#dragPlaceholder").before(drag_this).remove();
80         $(drag_this).removeClass("dragHide");
81     };
82     function add(e) {
83         console.log("点击触发");
84     };
85     function addDnDHandlers(elem) {
86         //elem.addEventListener('drag', handleDrag, false);
87         elem.addEventListener('dragstart', handleDragStart, false);
88         elem.addEventListener('dragenter', handleDragEnter, false)
89         elem.addEventListener('dragover', handleDragOver, false);
90         elem.addEventListener('dragleave', handleDragLeave, false);
91         elem.addEventListener('drop', handleDrop, false);
92         elem.addEventListener('dragend', handleDragEnd, false);
93         elem.addEventListener('click', add, false);
94     };
原文地址:https://www.cnblogs.com/konghaowei/p/9455077.html