Опубликован: 10.04.2013 | Доступ: свободный | Студентов: 482 / 15 | Длительность: 16:52:00
Специальности: Программист
Лекция 3:

Ввод данных и сенсоры

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Унифицированные события указателя

В любой ситуации, когда вы хотите напрямую работать с сенсорным экраном, мышью или пером, возможно, для реализации части языка касаний подобным образом, используйте события MSPointer*. Большинство приложений для рисования или художественной обработки изображений, например, используют эти события для отслеживания и отображения на экране результатов взаимодействия с пользователем. Снова напомню, что указатель – это способ для рассмотрения ввода данных, имеющий более низкий уровень, чем жесты, что мы увидим в следующем разделе. Какие модели ввода данных вы испоьзуете, зависит от типа событий, с которыми вы хотите работать.

Совет. События указателей не вызываются, если система пытается выполнить манипуляцию наподобие сдвига или масштабирования. Для того чтобы отключить у элемента манипуляции, задайте -ms-content-zooming: none или -ms-touch-action: none, и избегайте использования стилей -ms-touch-action в pan-x, pan-y, pinch-zoom, и manipulation.

Как и в слудчае с другими событиями, вы можете прослушивать события MSPointer* для любых подходящих элементов, помня, опять же, что эти события транслируются в традиционные события мыши, поэтому не следует прослушивать и те и другие. Специальные события, которые описаны ниже, даны в порядке их типичной последовательности:

Это – те имена, которые используют с addEventListener. Эквивалентные имена свойств имеют, как обычно, форму onmspointerdown. Должно быть очевидным то, что некоторые из этих событий могут не вызываться указателями всех типов. Сенсорные экраны, например, обычно не вызывают события зависания указателя над элементом, хотя некоторые из них, те, что могут определять близость пальца, способны на это.

Совет. Если по каким-то причинам вы хотите предотвратить трансляцию события MSPointer* в традиционное событие мыши, вызовите метод eventArgs.preventDefault внутри соответствующего обработчика события.

Упражнение PointerEvents, которое можно найти среди дополнительной информации к курсу, как показано на рис. 3.1., позволяет вам увидеть, что происходит с событиями мыши, указателей, жестов, выборочно показывая группы событий на экране.

Экран упражнения PointerEvents (экран слегка обрезан для показа подробностей)

Рис. 3.1. Экран упражнения PointerEvents (экран слегка обрезан для показа подробностей)

Внутри обработчиков для всех событий MSPointer*, объект eventArgs содержит полный набор свойств. Одно из них, pointerType, идентифицирует тип устройства ввода: серсорная панель (2), ручка (3), и мышь (4). Эти свойства позволяют вам, если нужно, реализовывать различное поведение для различных способов ввода. Каждый объект события так же содержит укникальное значение pointerId, которое содержит информацию о штрихе или линии для конкретной точки контакта, что позволяет согласовывать первоначальное событие MSPointerDown с последующими событиями. Когда мы взглянем, в следующем разделе, на жесты, мы так же увидим, как ипользовать pointerId события MSPointerDown для сопоставления жеста с указателем.

Полный набор свойств, который поступает вместе с событием, на самом деле, слишком велик, чтобы его здесь приводить, так как он содержит множество обычных свойств DOM (http://msdn.microsoft.com/library/windows/apps/hh831236.aspx) вместе со свойствами, имеющими отношение к указателю, из объекта типа MSPointerEvent (http://msdn.microsoft.com/library/windows/apps/hh441233.aspx). Лучший способ посмотреть, что там находится – это запустить какой-нибудь код, наподобие примера "Ввод данных: обработка события указателя DOM" (http://code.msdn.microsoft.com/windowsapps/Input-DOM-pointer-and-2e5697ed) (это – приложение для рисования на элементе управления canvas), установить точку останова внутри обработчика одного из событий, и посмотреть на объект события. Нижеприведенная таблица описывает некоторые из свойсвт (и несколько методов), имеющих отношение к нашей беседе.

Таблица 3.3.
Свойства Описание
currentPoint Объект типа Windows.UI.Input.PointerPoint (http://msdn.microsoft.com/library/windows/apps/windows.ui.input.pointerpoint.aspx) . Он содержит множество других свойств, таких, как pointerDevice (объект Windows.Input.Device.PointerDevice как онисано ранее в этой лекции) и свойство, имеющее название properties, являющееся объектом типа Windows.UI.Input.PointerPointProperties.
pointerType Источником события может быть сенсорная панель, перо или мышь: MSPOINTER_TYPE_TOUCH (2), MSPOINTER_TYPE_PEN (3), and MSPOINTER_TYPE_MOUSE (4). Вы можете использовать это, если необходимы различные действия в зависимости от типа устройства ввода.
pointerId Уникальный идентификатор контакта. Он остается тем же самым в течение времени существования указателя. Если нужно, вы можете вызвать Windows.Devices.Input.getPointerDevice (http://msdn.microsoft.com/library/windows/apps/windows.devices.input.pointerdevice.getpointerdevice.aspx) с этим идинтификатором для получения объекта PointerDevice (http://msdn.microsoft.com/library/windows/apps/windows.devices.input.pointerdevice.aspx), который описывает возможности устройства ввода, как описано выше в данной лекции.
type Имя события, как, например, "MSPointerDown".
x, screenX, y, screenY Координаты X и Y центральной точки указателя, спозиционированные относительно экрана.
clientX, clientY Координаты X и Y центральной точки указателя, спозиционированные относительно пользовательской области приложения.
offsetX, offsetY Координаты X и Y центральной точки указателя, спозиционированные относительно элемента.
button Определяет кнопку, нажатую пользователем (на мыши или другом устройстве ввода с кнопками). Левой кнопке соответствует значение 0, средней – 1, правой – 2. Эти значения могут комбинироваться с помощью побитовой операции OR для одновременного нажатия нескольких кнопок (chord).
ctrlKey, altKey, shiftKey Показывает, была ли нажата определенная клавиша клавиатуры, когда произошло событие указателя.
hwTimestamp Отметка времени (в микросекундах), показывающая время, когда событие было получено от устройства.
relatedTarget Предоставляет элемент, соответствующий текущему событию Provides the element related to the current event, например, событие MSPointerOut. Предоставляет элемент, к которому было осуществлено перемещение точки касания. Может иметь значение null.
isPrimary Показывает, является ли данный указатель основным в сценарии с несколькими касания (как указатель мыши).
Свойства, присутствующие в зависимости от поддержки устройством (если поддержки нет, будут иметь значение 0)
width, height Ширина контактной точки и высота, заданная pointerId.
pressure Нажим ручки, нормализованное к диапазону значений 0 – 255.
rotation Движение курсора по часовой стрелке вокруг собственной основной оси в диапазоне 0 – 359.
tiltX Наклон влево-вправо от нормального положения датчика (обычно – от перпендикуляра к поверхности), значение в диапазоне от -90 (влево), до 90 (вправо).
tiltY Наклон вперед-назад от нормального положения датчика (обычно – от перпендикуляра к поверхности) в диапазоне от -10 (вперед, от пользователя), до 90 (назад, к пользователю).
Методы
currentPoint, getCurrentPoint Предоставляет объект типа Windows.UI.Input.PointerPoint (http://msdn.microsoft.com/library/windows/apps/windows.ui.input.pointerpoint.aspx) для текущего указателя ввода, соответствующее целевому элементу (currentPoint) или заданному элементу (getCurrentPoint)
intermediatePoints,getIntermediatPoints Предоставляет историю PointerPoint для текущего указателя по отношению к целевому элементу (intermediatePoint) или заданному элементу (getIntermediatePoints)

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

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >