2016-11-09 3 views
0

В настоящее время я работаю над проектом, используя LeapMotion с интерфейсом javascript/html. Я хотел бы управлять всем приложением с помощью LeapMotion (включая щелчок, щелчок, перетаскивание и т. Д.). Однако я столкнулся с проблемой.Моделирование кликов Javascript на странице

Я хотел бы вызвать MouseEvent("click"), однако я не хочу запускать событие на конкретном элементе (как обсуждалось here). Это связано с тем, что я не хочу «вручную» проверять, для какого элемента мой курсор LeapMotion закончен, и вызвать триггер на нем. Вместо этого я хотел бы вызвать более «чистое» событие click, в котором javascript определяет, на что щелкнули. Что-то вроде этого возможно? Если нет, есть ли разумная работа?

Заранее благодарен!

EDIT: Дополнительная информация. В настоящее время я могу определить в своем коде, когда мне нужно вызвать событие click на основе данных из LeapMotion. Моя проблема в том, что мне нужен способ запуска события click на странице. В настоящее время решения, которые я нашел, могут создать MouseEvent, но затем они должны вызвать его на конкретном div/element/etc. Я хотел бы вызвать более «глобальный» MouseEvent, чтобы я мог вызвать его на странице вместо определенного элемента.

+0

что-то вроде [этого] (http://stackoverflow.com/questions/29555044/javascript-global-onclick-listener)? –

+0

Мне нужно вызвать событие «global click», так что это противоположность (я думаю?). Я добавлю дополнительную информацию выше. – BrandonM

+1

@KevinKloet Похоже, функция, которая прослушивает событие щелчка, не эмулирует его. Он хочет использовать JavaScript для обнаружения, когда внешнее указывающее устройство без каких-либо драйверов, которые будут зарегистрированы как указывающее устройство на компьютере, зависает над элементом. – Crowes

ответ

0

Для тех, кто имеет аналогичную проблему в будущем, вот как я в итоге решил это.

LeapMotion обновляет положение объекта «курсор» на экране. Когда я определить, щелчок выполняется пользователем, я выполнить следующее:

  1. Получить позицию курсора (некоторые вычисления пошли в это ссылаться на центр курсора вместо верхнего и левого смещения, что javascript даст вам)
  2. Использование document.elementFromPoint(x, y) Я извлек элемент, в котором курсор находится в данный момент (может понадобиться некоторый синтаксический анализ здесь, если есть элементы, перекрывающие друг друга).
  3. Создайте MouseEvent следующим образом и отправьте его элементу.

    var evt = new MouseEvent("mousedown", function(){ 
        view: window, 
        cancelable: true, 
        clientX: x, 
        clientY: y 
    }); 
    element.dispatchEvent(evt); 
    

Я хотел бы также отметить, что мне нужно различать MouseDown, MouseUp, нажмите и MouseMove события. Поэтому существует определенная логика определения того, какое событие отправить. Тем не менее, я только извлекаю элемент по его позиции один раз (в вызове события mousedown), чтобы терпеть некоторое движение в руке пользователя при нажатии.

Это не лучшее решение, но оно работает очень хорошо. Надеюсь, это поможет!

Смежные вопросы