Странное поведение с использованием jQuery, перетаскиваемого и изменяемого размера с помощью jquery collision 1.0.1 - PullRequest
2 голосов
/ 15 декабря 2011

Я использую:

jquery-1.6.2 jquery-ui-1.8.16 столкновение 1.0.1

... для создания веб-приложения для рисования блоков.У меня есть таблица сетки, которая имеет выбираемые ячейки.Над этим слоем находятся «шатры».Когда шатер перемещается или изменяется, я хочу, чтобы к перекрывающимся ячейкам в таблице ниже были применены специальные классы, поэтому я начал использовать столкновение 1.0.1.

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

Демонстрация в http://accessibledesign.net/block_painter/client/ (просто перетащите маркер наscreen)

Ячейки желтого цвета отражают столкновение с выделенной областью.

Я провел обширное тестирование и могу подтвердить, что сами изменяемые размеры имеют все правильные свойства, похоже, ошибка связана сфункция столкновения:

$("#grid td.ui-selected").removeClass("ui-selected");
hits = DATA.elems.curMarquee.collision($("#grid td.col"))
hits.addClass("ui-selected");

Этот код запускается на «остановке» изменяемого размера или перетаскиваемого - и запускается в правильное время.

1 Ответ

2 голосов
/ 16 декабря 2011

На самом деле это ошибка в модуле jquery-ui-draggable-collision. Точнее говоря, он еще не был разработан для обработки «изменяемого размера» - это будет в будущей версии. Если вам не нужны вещи с перетаскиваемыми коллизиями, устранение этого должно решить проблему.

Однако, если вам это нужно, пока есть обходной путь. Перед тем, как позвонить $("#target").collision(".obstacles"), сделайте:

$("#target").removeData("jqueryCollisionCoordinates")
$("#target").removeData("jqueryUiDraggableCollisionRecentPosition")
$(".obstacles").removeData("jqueryCollisionCoordinates")
$(".obstacles").removeData("jqueryUiDraggableCollisionRecentPosition")

И это удалит все внутреннее кэширование, которое он делает, чтобы он пересчитал столкновение с нуля, а не использовал предыдущую версию, которая еще не была обновлена.

Примечание. Если вы также можете подать заявку на исправление ошибки на странице sourceforge , пожалуйста, и перейдите по ссылке на эту страницу, я со временем исправлю ее, и вы получите сообщение, когда я делаю. Вы также можете добавить свой сайт к обзору, и я постараюсь помнить об использовании опубликованных пользователей при внесении изменений. Спасибо!

Также обратите внимание: возможно, об этом не нужно говорить, но не зависите от этой работы после версии 1.0.1. Также не беспокойтесь о содержании этих внутренних компонентов, иначе оно может сломаться в будущих версиях - это не публичный API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...