1. 程式人生 > >HTML5高階例項之Drag&Drop

HTML5高階例項之Drag&Drop

var relativeX = 0;//可移動元素相對於父元素的位置 var relativeY = 0; var mousedownX = 0;//滑鼠在可移動元素上單擊時,相對於該元素的位置 0 < x < 100 var mousedownY = 0; var draggableEle = document.getElementById('child'); function dragstart(ev) { //ev.dataTransfer.setData("Text",ev.target.id);//獲取拖動元素例項 } function
drag(ev) {
} function mousedown(ev) { //ev物件下offsetX offsetY滑鼠在該移動元素上的位置 mousedownX = ev.offsetX; mousedownY = ev.offsetY; } function dragend(ev) { //ev物件下screenX clientX pageX x都相同 //ev物件下clientY pageY y都相同,相對於可視區域的垂直位置;但screenY不同,screenY是相對於螢幕的垂直位置
//ev物件下offsetX offsetY滑鼠移動的位移+滑鼠在該移動元素上的位置 //DOM元素屬性操作方法 getAttribute()、setAttribute()、removeAttribute() //DOM元素樣式操作方法 elm.style.color 獲取和賦值 relativeX += ev.offsetX - mousedownX; relativeY += ev.offsetY - mousedownY; //draggableEle.setAttribute('style','left:'+ relativeX + 'px;top:' + relativeY + 'px');//失效,因為重置了所有屬性,丟失了寬高
//水平方向 if(ev.screenX <= 20 || ev.screenX >= 620){//鼠標出界 if(ev.screenX <= 20){//父元素相對於螢幕的margin-left: 20px; draggableEle.style.left = 0 + 'px'; relativeX = 0;//注意:此處沒有px }else if(ev.screenX >= 620){//父元素寬600 + 20 draggableEle.style.left = 500 + 'px';//600-100 relativeX = 500;//注意:此處沒有px }else{ draggableEle.style.left = relativeX + 'px'; } }else{//元素出界滑鼠沒有出界 if(ev.screenX <= mousedownX + 20){ draggableEle.style.left = 0 + 'px'; relativeX = 0;//注意:此處沒有px }else if(ev.screenX >= mousedownX + 520){//600-100+20 draggableEle.style.left = 500 + 'px'; relativeX = 500;//注意:此處沒有px }else{ draggableEle.style.left = relativeX + 'px'; } } //垂直方向 if(ev.pageY <= 20 || ev.pageY >= 440){//鼠標出界 if(ev.pageY <= 40){ draggableEle.style.top = 0 + 'px'; relativeY = 0;//注意:此處沒有px }else if(ev.pageY >= 440){ draggableEle.style.top = 340 + 'px'; relativeY = 340;//注意:此處沒有px }else{ draggableEle.style.top = relativeY + 'px'; } }else{//元素出界滑鼠沒有出界 if(ev.pageY <= mousedownY + 40){ draggableEle.style.top = 0 + 'px'; relativeY = 0;//注意:此處沒有px }else if(ev.pageY >= mousedownY + 380){//400-60+40 draggableEle.style.top = 340 + 'px'; relativeY = 340;//注意:此處沒有px }else{ draggableEle.style.top = relativeY + 'px'; } } } //必須重寫dragenter事件和dragover事件,阻止這兩個事件的預設行為觸發,才能觸發drop事件 function dragenter(ev) { ev.preventDefault();//dragenter事件的預設行為是該元素不允許其他元素放入,阻止預設行為之後,其他元素即可放入 } function dragover(ev) { ev.preventDefault();//dragover事件的預設行為是該元素不允許其他元素放入,阻止預設行為之後,其他元素即可放入 } //在Firefox3.5+中,放置事件的預設行為是開啟被放到放置目標上的URL,為了相容性,需要取消drop事件的預設行為 function drop(ev) { ev.preventDefault(); }