拖拽事件:
拖拽前要给每个元素都添加 draggable=’true’;才能让元素进行拖拽
拖拽元素事件:事件对象为被拖拽元素:
ondragstart
拖拽前触发此事件,拖拽的一瞬间
ondrag
拖拽前和拖拽结束之间连续触发
ondragend
拖拽结束触发;
目标元素事件:事件对象为目标元素:
ondragenter
进入目标元素触发;相当于mouseover
>ondragover
进入目标元素和离开目标元素之间连续触发
ondragleave
离开目标元素触发,相当于mouseout
>ondrop
在目标元素上释放鼠标触发;
要想在目标元素中执行ondrop
事件必须在ondragover
事件中阻止默认事件:
el.οndragοver = function(ev) { ev.preventDefault(); };
|
拖拽对象:
ev.dataTransfer
这个对象中的方法:
setData(key,value);
当你拖拽一个元素的同时可以设置一个 key 值用来存放被拖拽元素的属性;
getData();
获取数据;根据setData();
中设置数据的 key 值获取对应的 value;
setDragImage(元素,x,y);
此方法设置元素被拖拽时跟随鼠标的元素样式以及鼠标的位置;
演示 Demo
<div class="box"> <p>2313132</p> <span>哈哈哈</span> </div> <div class="box1"></div> <script> var box = document.getElementsByClassName("box")[0]; var box1 = document.getElementsByClassName("box1")[0]; box.setAttribute("draggable", "true"); box1.setAttribute("draggable", "true"); box.ondragstart = function(event) { event.dataTransfer.setData("a", this.innerHTML); var boxX = box.offsetWidth / 2; var boxY = box.offsetHeight / 2; event.dataTransfer.setDragImage(this, boxX, boxY); }; box.ondrag = function() { this.style.visibility = "hidden"; }; box.ondragend = function() { this.style.visibility = "visible"; }; box1.ondragenter = function() { }; box1.ondragover = function(event) { event.preventDefault(); }; box1.ondrop = function(event) { var box2 = document.createElement("div"); box2.className = "box"; box2.innerHTML = event.dataTransfer.getData("a"); this.append(box2); var aX = event.offsetX - box.offsetWidth / 2; var aY = event.offsetY - box.offsetHeight / 2; console.log(aX); console.log(aY); box2.style.marginLeft = aX + "px"; box2.style.marginTop = aY + "px"; box.remove(); }; box1.ondragout = function() { }; </script>
|