【发布时间】:2012-07-24 06:11:59
【问题描述】:
来自dragend 的警报将mouseX 显示为零,无论它当前在哪里。这在 Chrome 中运行良好,所以不确定我做错了什么。
function move(e,obj,but){
if(typeof(obj) === 'string'){
obj = document.getElementById(obj) ;
}
if(typeof(but) === 'string'){
but = document.getElementById(but) ;
}
//elementCoord(but) ;//get the current coords of the button &
elementCoord(obj) ;//the container
e = e || window.event ;
var mouseX = e.clientX ;
var mouseY = e.clientY ;
//alert('mouseX='+mouseX+', but.XCoord '+but.XCoord) ;
var diffX = Math.abs(obj.XCoord - mouseX) ;
var diffY = Math.abs(obj.YCoord - mouseY) ;
but.addEventListener("dragend",function(evt){
evt = evt || window.event ;
mouseX = evt.clientX ;
mouseY = evt.clientY ;
obj.style.left = mouseX - diffX + 'px';
obj.style.top = mouseY - diffY + 'px';
alert('mouseX='+mouseX+' diffX='+diffX) ;
}
,false) ;
}
忘了提一下,elementCoord 只是获取对象的偏移量,并将其添加为属性。它适用于所有浏览器。
【问题讨论】:
-
dragend事件适用于源元素,即被拖动的元素。使用drop事件的clientX和clientY获取目标元素的坐标,而不是使用dragend。 -
浏览器差异:在IE10中clientX在“dragstart”、“dragend”、“drop”中是相同的,但在Chrome/Firefox中“dragend”是相对于拖动源的(向右拖动,clientX为负数) )。
-
只是提醒人们在
drag部分更喜欢clientX和clientY而不是`x`和y点击开始拖动... -
即使
drag事件我也遇到了这个问题
标签: javascript drag-and-drop mouse-position