将元素拖放到iframe中.可降区域坐标错误,碰撞错误

Drag and drop elements into an iframe. Droppable area has wrong coordinates and collisions are wrong

本文关键字:错误 坐标 区域 碰撞 拖放 元素 iframe      更新时间:2023-09-26

我需要在网页元素和iframe元素之间实现拖放功能(在你开始抱怨iframe之前,我需要它的技术原因,它不是一个选项)。

我在页面中有一些元素可以被拖放到iframe内的目标可拖放元素中。

我已经设法用jQuery UI和YUI做到了这一点,尽管两个库都提出了同样的问题:目标元素(可拖放的目标)坐标被误解了,两个库考虑的拖放区域是错误的,不代表实际的可拖放对象,因此拖放对象和被拖放元素之间的碰撞完全混乱了。这就像标准库看到可掉落元素被放置在另一个位置,而不是它实际所在的位置。

我认为这是由于iframe没有被定位在页面的左上角,而是在中间。我这么想是因为我读过很多人抱怨这个问题,如果iframe位于左上角,问题就会出现。有人建议,可放元素的坐标可以根据screenX和screenY计算,而不是clientX和clientY,这可能是问题的原因,没有考虑到元素在iframe内,因此iframe外的其他元素之间的坐标不同。

因此,由于似乎没有办法直接使用库功能来解决这个问题,而且我真的没有时间尝试那里可用的每个库,我正在考虑通过修改(修补)有问题的库的内部函数来解决这个问题。

问题是:

1)是否有人以前遇到过这种行为,并设法解决了这个问题?或者,是否有一个库可以完美地做到这一点?

2)是否有一些方法可以使用库本身的方法和功能来解决这个问题?如果没有

3)有人知道库的哪一部分计算可拉区域坐标,以便我可以将其固定为最后的极端选项吗?

提前感谢,即使是最小的帮助将被感激!


编辑

这个小提琴演示了这个问题。尝试将绿色方块移动到红色方块内(红色方块位于iframe内)。你会发现两个方块之间的碰撞是错误的。

http://jsfiddle.net/DQdZ9/23/

这不是一个"银弹",但我将继续把这个作为一个答案,但我不确定它对你有多大价值。我在jQuery UI中找到了一个关键函数,它可能就是您正在寻找的。它在$.ui.ddmanager(拖放管理器)中,函数是prepareOffsets。这条线:

m[i].offset = m[i].element.offset();

似乎是在设置偏移量,以便在实际删除元素时使用。在这里可以根据可掉落元素是否是iframe的子元素来调整产生的偏移量。

上面还有另一个函数$.ui.intersect,它执行逻辑来查看可拖放和可放是否相互相交。

我使用的是最新版本的jQuery UI,文件是 jQuery - UI -1.8.14.custom.js 2012-2029行。如果你得到的是单个可放文件本身jquery.ui.droppable.js,它在第203-220行。这些是dev文件,不是min文件