Переместить указатель мыши в определенную позицию? - PullRequest
112 голосов
/ 20 января 2011

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

Ответы [ 9 ]

165 голосов
/ 20 января 2011

Вы не можете перемещать указатель мыши с помощью JavaScript.

Просто подумайте о последствиях на секунду, если сможете;)

  1. Пользователь думает: "эй, я бы хотел нажать на эту ссылку"
  2. Javascript перемещает курсор мыши на другую ссылку
  3. Пользователь щелкает неправильную ссылку и непреднамеренно загружает вредоносное ПО, которое форматирует его c-диск и ест его конфету
80 голосов
/ 16 августа 2011
  1. Запуск небольшого веб-сервера на клиентском компьютере.Может быть небольшая вещь 100 КБ.Сценарий Python / Perl и т. Д.
  2. Включает небольшой предварительно скомпилированный исполняемый файл C , который может перемещать мышь.
  3. Запустите его как CGI-Сценарий с помощью простого http-вызова AJAX, с любыми координатами, на которые вы хотите переместить мышь, например:

    http://localhost:9876/cgi/mousemover?x=200&y=450

PS:Для любой проблемы существуют сотни оправданий того, почему, и как - это нельзя и нельзя - делать ... Но в этой бесконечной вселенной, на самом деле это просто вопрос решимости - относительно того, будете ли ВЫ делатьэто случилось.

69 голосов
/ 21 января 2011

Я полагаю, что вы могли бы выполнить перемещение курсора мыши в заданную область экрана, если бы вы не использовали реальный (системный) курсор мыши.

Например, вы можете создать изображение для действиявместо вашего курсора обработайте событие, которое после обнаружения входа мыши в вашу сцену установит стиль для системного курсора на «none» (sceneElement.style.cursor = 'none'), а затем вызовет скрытый элемент изображения, выступающий в качестве курсора, где бы вы ни находилиськак в сцене на основе предопределенного перевода оси / ограничительной рамки.

Таким образом, независимо от того, как вы переместили реальный курсор, ваш метод перевода будет держать курсор изображения в любом месте.

edit: пример в jsFiddle с использованием представления изображения и принудительнымдвижение мыши

62 голосов
/ 02 февраля 2011

Отличный вопрос.Это действительно чего-то не хватает в API браузера Javascript.Я также работаю над игрой WebGL со своей командой, и нам нужна эта функция.Я открыл вопрос об bugzilla в Firefox, чтобы мы могли начать говорить о возможности использования API для блокировки мыши.Это будет полезно для всех разработчиков игр HTML5 / WebGL.

Если хотите, зайдите и оставьте комментарий со своим отзывом, и поставьте вопрос:

https://bugzilla.mozilla.org/show_bug.cgi?id=630979

Спасибо!

41 голосов
/ 14 октября 2012

Вы можете определить положение указателя мыши и затем переместить веб-страницу (с относительным положением тела), чтобы они наводили курсор на то, что вы хотите, чтобы они нажимали.

Например, вы можете вставить этот код на текущую страницу в консоли браузера (и впоследствии обновить)

var upvote_position = $('#answer-12878316').position();
$('body').mousemove(function (event) {
    $(this).css({
        position: 'relative',
        left: (event.pageX - upvote_position.left - 22) + 'px',
        top: (event.pageY - upvote_position.top - 35) + 'px'
    });        
});
11 голосов
/ 13 мая 2015

Вы не можете двигать мышь, но можете заблокировать ее.Примечание: что вы должны вызывать requestPointerLock в событии щелчка.

Маленький пример:

var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();

Документация и пример полного кода:

https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API

7 голосов
/ 09 ноября 2013

Итак, я знаю, что это старая тема, но я сначала скажу, что это невозможно. Ближайшая вещь в настоящее время - это блокировка мыши в одной позиции и отслеживание изменений ее x и y. Эта концепция была принята - похоже, - Chrome и Firefox. Он управляется так называемой блокировкой мыши , и нажатие клавиши escape приведет к его поломке. Из моего краткого чтения я думаю, что идея заключается в том, что он блокирует мышь в одном месте и сообщает о событиях движения, похожих на события щелчка и перетаскивания.

Вот документация к выпуску:
FireFox: https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Chrome: http://www.chromium.org/developers/design-documents/mouse-lock

А вот довольно аккуратная демонстрация: http://media.tojicode.com/q3bsp/

4 голосов
/ 21 января 2011

Вы не можете перемещать указатель мыши с помощью JavaScript, и, следовательно, по очевидным причинам безопасности. Лучший способ добиться этого эффекта - поместить элемент управления под указатель мыши.

0 голосов
/ 26 сентября 2017

Разве это не может быть просто сделано путем получения фактического положения указателя мыши, а затем вычисления и компенсации действий мыши спрайтов / сцен на основе этой компенсации?

Например, вам нужно, чтобы указатель мыши находился внизу по центру, но он расположен вверху слева;скрыть курсор, использовать смещенное изображение курсора.Сдвиньте движение курсора и отобразите ввод мыши, чтобы он соответствовал щелчкам спрайта (или «управления») перемещенного курсора. Когда / если границы достигнут, пересчитайте.Если / когда курсор действительно достигает точки, которую вы хотите, удалите компенсацию.

Отказ от ответственности, а не разработчик игры.

...