首页 > 代码库 > 拖拉事件
拖拉事件
var dragged; var f = document.getElementById(‘div3‘); document.getElementById(‘draggable‘).addEventListener("dragstart", function( event ) { // 保存被拖拉节点 dragged = event.target; // 被拖拉节点的背景色变透明 event.target.style.opacity = 0.5; // 兼容Firefox event.dataTransfer.setData(‘text/plain‘, ‘anything‘); }, false); document.getElementById(‘draggable‘).addEventListener(‘dragend‘, function( event ) { // 被拖拉节点的背景色恢复正常 event.target.style.opacity = ‘‘; }, false); f.addEventListener(‘dragover‘, function( event ) { // 防止拖拉效果被重置,允许被拖拉的节点放入目标节点 event.preventDefault(); }, false); f.addEventListener(‘dragenter‘, function( event ) { // 目标节点的背景色变紫色 // 由于该事件会冒泡,所以要过滤节点 if ( event.target.className == ‘dropzone‘ ) { event.target.style.background = ‘purple‘; } }, false); f.addEventListener(‘dragleave‘, function( event ) { // 目标节点的背景色恢复原样 if ( event.target.className == ‘dropzone‘ ) { event.target.style.background = ""; } }, false); f.addEventListener(‘drop‘, function( event ) { // 防止事件默认行为(比如某些Elment节点上可以打开链接) event.preventDefault(); if ( event.target.className === ‘dropzone‘ ) { // 恢复目标节点背景色 event.target.style.background = ‘‘; // 将被拖拉节点插入目标节点 dragged.parentNode.removeChild( dragged ); event.target.appendChild( dragged ); } }, false);
<div class="dropzone" id="div1"> <div id="draggable" draggable="true" style="background-color: yellow"> 该节点可拖拉 </div></div><br/><br/><br/><div class="dropzone" id="div2"></div><br/><br/><br/><div class="dropzone" id="div3"></div><br/><br/><br/> <div class="dropzone" id="div4"></div>
dragover事件:拖拉到当前节点上方时,在当前节点上持续触发,该事件的target属性是当前节点。该事件与dragenter事件基本类似,默认会重置当前的拖拉事件的效果(DataTransfer对象的dropEffect属性)为none,即不允许放下被拖拉的节点,所以如果允许在当前节点drop数据,通常会使用preventDefault方法,取消重置拖拉效果为none。
原文链接:http://javascript.ruanyifeng.com/dom/event-type.html
拖拉事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。