Функциональность перетаскивания и выбора JavaScript выполнена правильно

#javascript #jquery #jquery-ui #selection #drag

#javascript #jquery #jquery-пользовательский интерфейс #выбор #перетаскивание

Вопрос:

Я пытаюсь написать функциональность перетаскивания и выбора, используя HTML и JavaScript. Под этим я подразумеваю, что будет набор объектов с произвольными абсолютными позициями. Я хочу иметь возможность перетаскивать курсор по области, где они расположены. Думайте об этом как о стратегии RTS (выбор объектов) или, альтернативно, как о любом редакторе векторной графики (выбор объектов для их перемещения и редактирования).

Прежде всего, я в курсе того, что появляется на первых нескольких страницах Google amp; SO. Поэтому я ни в коем случае не прошу погуглить эти вещи для меня и опубликовать здесь несколько случайных ссылок.

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

Я прошу рекомендации по коду / библиотекам, которые вы действительно использовали или видели успешно использованными.

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

Самое близкое, что я смог найти, это:http://view.jquery.com/tags/ui/1.5b2/demos/ui.selectable.html

Однако, похоже, она тесно связана с пользовательским интерфейсом jQuery, который, в свою очередь, требует jQuery 1.3.x, тогда как я действительно с нетерпением ждал использования jQuery 1.5

Ответ №1:

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

Функция, которую вы ищете, называется e.preventDefault();

 $("#inputform").mousedown(function(e){
    e.preventDefault();
    //console.log('mousedown');
}).mouseup(function(e){
    e.preventDefault();
    //console.log('mouseup');
});
  

Это просто решает проблему выделения текста. Я вижу различные js-скрипты для перетаскивания по всему Интернету, но почему-то я не могу заставить их работать.

Ответ №2:

Я не уверен на 100%, правильно ли я понял ваш вопрос. Но я сделал два плагина, которые, я думаю, обрабатывают описанные вами случаи. Им не нужна никакая зависимость, поэтому нет необходимости в jQuery или чем-то еще. Даже если вы ими не пользуетесь, код хорошо документирован и должен помочь вам написать свой собственный.

Для перетаскивания существует dragNdrop
Для механизма выбора существует функция DragSelect (версия v2 теперь также может обрабатывать перетаскивание выбранных элементов).

Всегда пожалуйста. Надеюсь, это поможет!

Ответ №3:

Даже если вы хотите использовать jquery 1.5, я все равно рекомендую проверить опцию перетаскивания jquery-ui (судя по тому, как я интерпретирую ваше желание, это похоже на то, чего вы пытаетесь достичь).

http://jqueryui.com/demos/draggable/

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

Что касается желания узнать, как это должно быть сделано, вы можете довольно легко изучить несжатое ядро jquery. Это довольно хорошо документировано и довольно просто для чтения.

Комментарии:

1. Что касается того, что jquery-ui остается в курсе ядра, у меня есть некоторые опасения. Он отстает от двух основных выпусков (1.4 и 1.5) и, насколько я помню, отстает как минимум на год. Похоже, что в 1.4 внесено так много изменений, что на самом деле нет никого, кто хотел бы обновить весь этот код.