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

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

Ответ 1

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

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

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

Спасибо!

Ответ 2

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

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

  • Пользователь думает: "эй, я бы хотел нажать эту ссылку"
  • Javascript перемещает mousecursor на другую ссылку
  • Пользователь нажимает неверную ссылку и случайно загружает вредоносное ПО, которое форматирует его c-диск и ест его конфету

Ответ 3

  • Запустите небольшой веб-сервер на клиентской машине. Может быть небольшая вещь 100 КБ. Python/Perl script и т.д.
  • Включите небольшой, предварительно скомпилированный исполняемый файл C который может перемещать мышь.
  • Запустите его как CGI- script с помощью простого HTTP-вызова, AJAX, независимо от того, с какими координатами вы хотите переместить мышь, например:

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Вот документация выпуска:
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/

Ответ 8

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

Ответ 9

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

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

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