Перетащите элементы в iframe.У сбрасываемой области неправильные координаты, а столкновения неправильные - PullRequest
10 голосов
/ 25 июля 2011

Мне нужно реализовать функции перетаскивания в веб-приложении между элементами, присутствующими на веб-странице, и элементами внутри iframe (прежде чем вы будете жаловаться на iframe, мне НУЖНО это по техническим причинам, это не вариант).

У меня есть элементы на странице, которые можно перетаскивать в целевые сбрасываемые элементы внутри iframe.

Мне удалось сделать это как с jQuery UI, так и с YUI, хотя обе библиотеки представляют одну и ту же проблему: координаты целевого элемента (отбрасываемой цели) неверно истолкованы, область отбрасывания, рассматриваемая обеими библиотеками, неверна и не представляет фактический сбрасываемый объект, следовательно, столкновения между перетаскиваемым объектом и отброшенным элементом полностью перепутаны.Это похоже на то, что библиотека видит сбрасываемый элемент, расположенный в другом месте, откуда он фактически находится.

Я думаю, это связано с тем, что iframe располагается не в верхнем левом углу страницы, а в середине.Я думаю, что это потому, что я читал много людей, жалующихся на эту проблему, и проблема исчезла, если фрейм был расположен в верхнем левом углу.Кто-то предполагает, что координаты отбрасываемого элемента могут быть рассчитаны на основе screenX и screenY, а не clientX и clientY, и это может быть причиной проблемы, не принимая во внимание, что элементы находятся внутри iframe, и поэтому координаты различаютсямежду другими элементами за пределами iframe.

Итак, поскольку, кажется, нет способа исправить это напрямую, используя библиотечные функции, и у меня действительно нет времени, чтобы попробовать все доступные библиотеки, я думаю,об устранении проблемы путем изменения (исправления) внутренних функций рассматриваемой библиотеки.

Вопросы:

1) Кто-то испытывал такое поведение раньше, иудалось решить проблему?Или есть библиотека, которая способна сделать это без нареканий?

2) Есть ли способ решить эту проблему, используя методы и функциональные возможности самой библиотеки?А если нет, то

3) Кто-нибудь знает, какая часть библиотеки рассчитывает координаты области сбрасывания, чтобы я мог исправить это как последний крайний вариант?

Заранее спасибо, дажеМы будем благодарны за помощь!


РЕДАКТИРОВАТЬ

Эта скрипка демонстрирует проблему.Попробуйте переместить зеленый квадрат внутри красного квадрата (который находится внутри фрейма).Вы заметите, что столкновение между двумя квадратами неверно.

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

1 Ответ

7 голосов
/ 25 июля 2011

Это не «серебряная пуля», но я пойду дальше и опубликую это как ответ, но я не уверен, какую ценность это будет иметь для вас. Я обнаружил ключевую функцию в jQuery UI, которая может быть тем, что вы ищете. Он находится в $.ui.ddmanager (диспетчер перетаскивания), а функция - prepareOffsets. Эта строка:

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

, похоже, тот, который устанавливает смещение для использования, когда элемент фактически отбрасывается. Это может быть место, где можно поиграть, чтобы скорректировать результирующее смещение в зависимости от того, является ли выпадающий элемент дочерним элементом iframe.

Есть еще одна функция над ней $.ui.intersect, которая выполняет логику, чтобы увидеть, пересекаются ли перетаскиваемый и перетаскиваемый объекты.

Я в последней версии пользовательского интерфейса jQuery, и файл jquery-ui-1.8.14.custom.js на линии 2012-2029. Если вы получите один файл для удаления, jquery.ui.droppable.js , он будет в строках 203-220. И это файлы dev, а не файлы min.

...