5

我有一个使用拖放的 HTML5 应用程序。本质上,用户可以将图像从“抽屉”拖到画布上以创建更大的图像。我希望元素落在它们被释放的地方。我可以在除 Firefox 之外的所有浏览器中使用此功能。

drop事件中,我使用以下内容来获取鼠标的坐标,并计算画布中放置的图像的位置。

var top = evt.originalEvent.offsetX;
var left = evt.originalEvent.offsetY;

问题是,这个属性在 FF 中不可用。有没有其他方法可以得到这个?没有它,我看不到如何在 FF 中拖动和移动元素。

注意:我没有使用 canvas 元素。我正在将图像放到一个 div 中。不确定这是否重要。

4

3 回答 3

8

Try this in firefox..

var X = event.layerX - $(event.target).position().left;
var Y = event.layerY - $(event.target).position().top;
于 2012-11-20T10:28:42.130 回答
4

我尝试使用layerXlayerY但神秘的是它们与 Chrome 中的相同值不同。

然后我意识到在 Retina 显示器上 FirefoxsetDragImage不会考虑比例
换句话说,调用setDragImage(div, 10, 10)会将光标放在5px; 5px点上。

荒谬,不是吗?

var originalEvent = e.originalEvent,
  offsetX = originalEvent.offsetX,
  offsetY = originalEvent.offsetY;

if (_.isUndefined(offsetX) || _.isUndefined(offsetY)) {
  // Firefox doesn't take scale into account so we need to compensate for it
  offsetX = originalEvent.layerX * (window.devicePixelRatio || 1);
  offsetY = originalEvent.layerY * (window.devicePixelRatio || 1);
}

originalEvent.dataTransfer.setDragImage(el, offsetX, offsetY);
于 2013-12-27T11:52:59.780 回答
0

我在上面尝试了 Kathirvans 的回答,但它对我不起作用。我的页面的魔药是...

var x = e.originalEvent.pageX - $(this).offset().left;
var y = e.originalEvent.pageY - $(this).offset().top; 
于 2013-10-12T00:20:03.500 回答