Необходимо добавить на веб-страницу возможность выбора элементов с помощью передвижения указателя мыши с удержанием в нажатом состоянии ее левой кнопки

Опубликовал: Friday, July 19, 2024 в категории jQuery, Подборка рецептов | Пока нет комментариев

Необходимо добавить на веб-страницу возможность выбора элементов с помощью передвижения указателя мыши с удержанием в нажатом состоянии ее левой кнопки или комбинации щелчка мышью с нажатием и удержанием клавиши <Ctrl> (<Meta>), подобно тому, как это делается в традиционных приложениях.

Решение

Применим плагин Selectable вместе с темой оформления "le-frog" для решения этой задачи (листинг 18.4.1).

Листинг 1 8 .4 .1 . Использование плагина Selectable

Обсуждение

Сначала подключаем файл стилей css/le-frog/jquery-ui-1.8.9.custom.css одной из многочисленных тем оформления. Вполне возможно, что у вас будет свое собственное оформление, но для изучения примеров лучше воспользоваться готовым примером. Кроме этого мы подключили файл библиотеки — js/jquery-1.4.4.min.js и файл js/jquery-ui-1.8.9.custom.min.js, объединяющий функциональность ядра UI и плагина Selectable. Для примера создадим список ol, пункты которого нам предстоит сделать выделяемыми. За связь плагина с HTML-разметкой отвечает фрагмент кода, приведенный в листинге 18.4.2.

Листинг 1 8 .4 .2 . Использование плагина Selectable

[code language=”javascript”]

В примере из листинга 18.4.2 мы выбрали нужный нам элемент по его идентификатору #selectable и связали с ним возможности плагина. В этом примере мы оставили настройки по умолчанию.

Однако мы имеем возможность передавать плагину при инициализации некоторые настройки. Как это можно делать, показано в листинге 18.4.3.

Листинг 1 8 .4 .3 . Использование пл а г ина Selectable

[code language=”javascript”]

В примере из листинга 18.4.3 мы передали плагину значение 100 в опции distance и этим определили расстояние в пикселах, которое должен пройти указатель мыши (с одновременно нажатой левой кнопкой), прежде, чем начнется выделение указанных элементов. Значения для остальных опций можно передать плагину подобным образом.

В табл. 18.10 приведено описание всех возможных опций плагина Selectable.

Таблица 18.10. Опции плагина Selectable

Опция

Описание

disabled

Значение по умолчанию — false. Если установить значение true, то при инициализации функциональность Selectable будет недоступна, однако может быть включена впоследствии, например, при выполнении какого-либо условия

autoRefresh

Значение по умолчанию — true, что определяет пересчет положения и размеров области выделения при попадании туда очередного элемента. Если таких элементов слишком много, может понадобиться отключить пересчет. Для этого следует установить значение false. При необходимости можно будет использовать для пересчета метод .selectable(‘refresh’)

cancel

Опция принимает в качестве значения селектор jQuery. Предотвращает начало выбора элементов, если при начале выбор указателя мыши находится над указанными элементами. Значение по умолчанию — ‘:input,option’

delay

В опции указывается число, устанавливающее время в миллисекундах, определяющее задержку начала выбора элементов. По умолчанию — 0

distance

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

filter

В качестве значения опции указывается селектор jQuery. Значение по умолчанию — *. В этой опции можно указывать элементы-потомки, которые будут сделаны выбранными (при условии, если они могут быть таковыми)

tolerance

Опция принимает в качестве значения строку. Значение по умолчанию — touch. Возможные значения ‘touch’ и ‘fit’. При указании значения ‘touch’ выбор элемента производится, когда область выбора перекрывает элемент какой-либо частью. При значении ‘fit’ выбор элемента производится, только когда область выбора перекрывает элемент полностью

Посмотрим теперь, на какие события может реагировать плагин Selectable. Таких событий всего семь. Названия событий и их описания приведены в табл. 18.11.

Таблица 18.11. События плагина Selectable

Опция

Событие

Описание

create

selectablecreate

Наступает в момент инициализации

selected

selected

Наступает по окончании выбора для каждого выбранного элемента

selecting

selecting

Происходит в процессе выбора для каждого выбранного элемента

start

selectablestart

Наступает при начале процесса выбора

stop

selectablestop

Наступает по окончании процесса выбора

Таблица 18.11 (окончание)

Опция

Событие

Описание

unselected

unselected

Наступает по окончании выбора для каждого элемента, не попавшего в выбор по сравнению с предыдущим состоянием

unselecting

unselecting

Происходит в процессе выбора, когда какой-либо элемент, присутствовавший в выборе, удаляется из него

В листинге 18.4.4 приведен пример события, которое происходит по окончании выбора элементов. Callback-функцию, вызываемую при наступлении этого события, можно определить в опции stop.

Листинг 1 8 .4 .4 . Использование плагина Selectable

[code language=”javascript”]

Callback-функция, которую мы определили в опции stop, может принимать два аргумента. Первый аргумент — объект события. Мы используем его внутри функции, обращаясь к свойству type, чтобы вывести в окне предупреждения название события, вызвавшего функцию.

В листинге 18.4.5 приведен пример задания опций start, selected и stop. В опциях start и stop определяются callback-функции, вызываемые при начале и окончании выбора элементов. В опции selected можно определить callback-функцию, которая вызывается для каждого выбранного элемента по окончании выбора.

Листинг 1 8 .4 .5 . Использование плагина Selectable

Давайте посмотрим, что будет происходить, если мы попробуем испытать в действии пример из листинга 18.4.5. Как только мы начнем выбор элементов, будет вызвана функция, определенная нами в опции start. Эта функция очистит все содержимое элемента с идентификатором #result и добавит в него название события, вызвавшего функцию.

Предположим, что мы выбираем элементы, передвигая указатель мыши и удерживая в нажатом состоянии ее левую кнопку. Договоримся также, что мы закончим выбор, как только будут выбраны два элемента li.

В этом случае, по окончании выбора будет сначала вызвана функция, определенная в опции selected. Причем у нас она будет вызвана дважды, для каждого выбранного элемента. Затем будет вызвана функция, которую мы определили в опции stop.

Обратите внимание, что в функцию, которая была определена в опции selected, мы передаем аргумент ui и используем его внутри функции, обращаясь к его свойству selected. Это свойство является объектом, представляющим элемент DOM, который был выбран.

Плагин Selectable имеет несколько методов, с помощью которых можно управлять им даже после инициализации. Примеры иллюстрирует листинг 18.4.6.

Листинг 1 8 .4 .6 . Использование плагина Selectable

В листинге 18.4.6 мы создаем три кнопки с идентификаторами #disable, #enable и

#destroy, связывая с ними события click. При нажатии на кнопки вызываем соответствующий метод плагина Selectable, временно отменяя функциональность плагина, вновь восстанавливая эту функциональность, и удаляя ее окончательно, возвращая элементы в состояние, предшествующее инициализации.

Описания всех доступных методов плагина Selectable приведены в табл. 18.12.

Таблица 18.12. Методы плагина Selectable

Метод

Описание

destroy

.selectable(‘destroy’)

Полностью удаляет всю функциональность плагина Selectable. Возвращает элементы

в состояние, предшествующее инициализации

disable

.selectable(‘disable’)

Временно запрещает всю функциональность плагина. Вновь разрешить ее можно с помощью метода enable

enable

.selectable(‘enable’)

Разрешает использование всей функциональности плагина, если ранее она была запрещена методом disable

option

.selectable(‘option’, optionName, [value])

Устанавливает значение любой опции плагина после инициализации

option

.selectable(‘option’, optionName)

С помощью этого метода можно получить значение любой опции плагина после инициализации

widget

.selectable(‘widget’)

Обеспечивает доступ к объекту, который представляет собой выбираемый элемент

Таблица 18.12 (окончание)

Метод

Описание

refresh

.selectable(‘refresh’)

Этот метод обычно применяется, если для опции autoRefresh установлено значение false. С помощью него можно пересчитать положение и размеры каждого выделенного элемента

Источник: Самков Г. А. jQuery. Сборник рецептов. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 416 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *