Javascript нажмите simulation на странице

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

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

Заранее спасибо!

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

1 ответ

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

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

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

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

    Я также должен отметить, что мне нужно различать события mousedown, mouseup, click и mousemove. Поэтому существует некоторая логика в определении того, какое событие отправлять. Однако я только извлекаю элемент по его положению один раз (в вызове события mousedown), чтобы допустить некоторое движение в руке пользователя при нажатии.

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