Переместить указатель мыши в определенное положение?


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

9 95

9 ответов:

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

Если вам нравится, прийти и оставить комментарий с обратной связью, и upvote вопрос:

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

спасибо!

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

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

  1. пользователь думает: "Эй, я хотел бы нажать на эту ссылку"
  2. Javascript перемещает mousecursor на другую ссылку
  3. пользователь нажимает неправильную ссылку и непреднамеренно загружает вредоносную программу, которая форматирует его c-drive и ест его конфеты
  1. запустить небольшой веб-сервер на клиентской машине. Может быть небольшой 100kb вещь. Скрипт Python / Perl и др.
  2. включить небольшой, предварительно скомпилированный C исполняемый файл, который можно двигать мышкой.
  3. запустите его как CGI-скрипт с помощью простого http-вызова, AJAX, что угодно - с координатами, на которые вы хотите переместить мышь, например:

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

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

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

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

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

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

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

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

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'
    });        
});

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

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

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

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

вот эти документы:
FireFox:https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
хром:http://www.chromium.org/developers/design-documents/mouse-lock

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

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

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

например, вам нужно, чтобы указатель мыши был внизу в центре, но он сидит слева вверху; скрыть курсор, использовать сдвинутое изображение курсора. Переместите движение курсора и сопоставьте ввод мыши, чтобы соответствовать перемещенному спрайту курсора (или "контроль") щелчки, когда/если границы поражены, пересчитайте. Если / когда курсор действительно попадает то, что вы хотите, чтобы это было, удалите компенсацию.

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