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

Jos*_*eti 10 javascript iframe yui drag-and-drop jquery-ui

我需要在网页中存在的元素和iframe中的元素之间的Web应用程序中实现拖放功能(在你开始抱怨iframe之前,我需要它出于技术原因,它不是一个选项).

我在页面中有元素可以拖动到iframe内的目标droppable元素.

我已经成功地使用jQuery UI和YUI,尽管两个库都存在同样的问题:目标元素(可放置目标)坐标被误解,两个库考虑的放置区域是错误的并且不代表实际的可放置对象因此,拖动的对象和掉落的元素之间的碰撞完全混乱.这就像图书馆看到droppable元素位于另一个有效位置的地方.

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

所以,因为似乎没有办法直接使用库函数来解决这个问题,而且我真的没有时间尝试每个可用的库,我正在考虑通过修改(修补)内部函数来修复问题.有问题的图书馆.

问题是:

1)之前有人遇到过这种行为,并设法解决了这个问题吗?或者,是否有一个能够完美地完成这项工作的图书馆?

2)有没有办法使用库本身的方法和功能来解决这个问题?如果不,

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

在此先感谢,即使是最小的帮助也将不胜感激!


编辑

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

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

jwa*_*980 7

这不是一个"银弹",但我会继续发布这个作为答案,但我不确定它对你有多大的价值.我在jQuery UI中找到了一个关键功能,可能就是你要找的东西.它在$.ui.ddmanager(拖放管理器)中,功能是prepareOffsets.这一行:

m[i].offset = m[i].element.offset();
Run Code Online (Sandbox Code Playgroud)

似乎是在实际删除元素时设置偏移量的那个.根据droppable元素是否为iframe的子元素,这可能是一个调整结果偏移量的地方.

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

我在最新版本的jQuery UI中,该文件是2012至2010年的jquery-ui-1.8.14.custom.js.如果您获得单个droppable文件本身,jquery.ui.droppable.js,它位于第203-220行.这些是开发文件,而不是最小文件.

  • 检查一下,看起来在修改偏移后效果会好一些......也许这就是要走的路!http://jsfiddle.net/DQdZ9/48/ (4认同)