将鼠标指针移动到特定位置?

Den*_*ter 117 javascript mouse

我正在构建一个HTML5游戏,我试图将鼠标光标放在特定事件的某个控件上,以便在特定方向上移动始终具有相同的结果.这可能吗?

Mar*_*sen 171

你不能用javascript移动mousepointer.

如果可以的话,只要想想一秒的含义;)

  1. 用户认为:"嘿,我想点击此链接"
  2. Javascript将mousecursor移动到另一个链接
  3. 用户点击错误的链接,无意中下载了格式化他的c-drive的恶意软件并吃了他的糖果

  • 网页可以强制下载而无需任何人点击链接,因此您声称的并不是真正的安全问题.但是,无法移动到网页窗口之外. (70认同)
  • 真正的点击劫持. (66认同)
  • 嘿,我讨厌争取控制我的鼠标光标:回到你的广告,回来我说! (23认同)
  • 想想看,这会很棒:P (15认同)
  • @dionyziz:强制下载到沙箱中然后通过用户交互启动用户空间下载之间存在很大差异.安全隐患实际上非常大. (11认同)
  • 你能展示糖果吃脚本的源代码吗? (10认同)
  • 我认为对话框应该询问用户是否要允许鼠标捕获.如果用户说'不',则不会发生这种情况 (7认同)
  • 你真的需要一个鼠标移动事件吗?程序员不能只听一个点击事件并更改网址吗?为什么让它变得明显?我不是说我支持有人这样做,只是有一种更聪明的方法来做xD.另外我想象浏览器只允许鼠标在dom空间内单击,而只允许其域名. (4认同)
  • @MartinJespersen 欺骗用户交互(不仅仅是点击)过去、现在和将来都可用,因此这不会改变任何事情。 (3认同)

Ale*_*ray 81

  1. 在客户端计算机上运行小型Web服务器.可以是一个小的100kb的东西.Python/Perl脚本等
  2. 包含一个可以移动鼠标的小型预编译C 可执行文件.
  3. 通过简单的http调用,AJAX等运行它作为CGI脚本 - 使用您想要移动鼠标的坐标,例如:

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

PS:对于任何问题,有数以百计的借口,为什么,以及如何 - 它不能,也不应该 - 做.但在这个无限的宇宙中,这只是一个决定的问题 - 关于你是否会让它成真.

  • 我想我们都在船上,直到"c可执行"...... xD (10认同)
  • C = 0依赖项.网络是http.没有可爱的主页,这里..只是运输. (3认同)
  • 你们中有人注意到问题下面的“Javascript”标签吗? (2认同)
  • 这是完全可能的:https://www.attejuvonen.fi/website-moves-your-cursor/ 源代码:https://github.com/baobabKoodaa/blog/blob/e91b6ab2843ca96ee3c93b48d248e683ffba0d6e/static/mouse/index.html (2认同)

Xax*_*xis 72

我想如果你没有使用真实(系统)鼠标光标,你可以完成将鼠标光标放到屏幕的给定区域.

例如,你可以创建一个代替光标的图像,处理一个事件,当检测到mouseenter进入你的场景时,将系统光标上的样式设置为'none'(sceneElement.style.cursor = 'none'),然后调出隐藏的图像元素作为光标,基于预定义的轴/边界框平移,可以在场景中随意使用.

这样,无论您如何移动真实光标,您的翻译方法都会将图像光标保留在您需要的任何位置.

编辑:使用图像表示和强制鼠标移动的jsFiddle中的示例

  • 这是最周到的答案.实际上提供了一个真正的解决方案,而其他一些答案点确实增加了任何价值:)但是当我们无法获得任何鼠标锁定时,webgl将如何带来有趣的游戏,如FPS等,听起来非常有限...... (12认同)
  • 是的你可以.您只需将给定元素上的光标样式设置为"none"即可.试试看. (5认同)
  • 玩弄了这个想法并在JSFiddle中做了一个例子http://jsfiddle.net/jaakkytt/9uczV/ (5认同)
  • 这仍然存在无法将鼠标"继续移动"到左侧的问题.鼠标离开网页后,您无法继续控制它. (3认同)
  • 这是这个问题的完美解决方案。有人抱怨的唯一原因是因为这不是一个微不足道的解决方案。伙计们,你有时必须做一些编程! (2认同)

dio*_*ziz 65

好问题.这实际上是Javascript浏览器API中缺少的东西.我也和我的团队一起开展WebGL游戏,我们需要这个功能.我在Firefox的bugzilla上打开了一个问题,以便我们可以开始讨论使用API​​来允许鼠标锁定的可能性.这对所有HTML5/WebGL游戏开发者都很有用.

如果您愿意,请过来在您的反馈中发表评论,并提出问题:

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

谢谢!

  • 如果发生这种情况,我将退出使用浏览器.:-P严重的是,网站只是不需要您在安装应用程序时给予的同意.如果我们都是好人只是采用这种级别的控制来改善用户体验,那将是一个很棒的功能.不幸的是,互联网是混蛋中心,这就是为什么我们希望在浏览器中永远不会看到许多非常简洁的功能.话虽这么说:全屏API可以"锁定"操作系统的其余部分. (51认同)
  • 更新:https://bugzilla.mozilla.org/show_bug.cgi?id = 633602和指针锁定的w3规范:https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html (9认同)
  • 它发生了.它非常棒(如果仍然以供应商为前缀):http://mdn.github.io/pointer-lock-demo/ (7认同)
  • 在应用程序实现此类锁定之前,将要求@Soneone Consent(类似于现在在流行的Web浏览器中请求全屏同意).此外,用户可以通过按ESC键来撤销同意. (4认同)

小智 42

您可以检测鼠标指针的位置,然后移动网页(相对于身体位置),以便将它们悬停在您希望它们单击的位置上.

例如,您可以将此代码粘贴到浏览器控制台中的当前页面上(之后刷新)

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'
    });        
});
Run Code Online (Sandbox Code Playgroud)

  • 如果您发布代码示例,那么您的帖子会更有价值.另外,我建议您查看常见问题解答:http://stackoverflow.com/faq (2认同)
  • 那真是太棒了!跳出框框思考的方式!我怀疑它是否真的提供了提问者想要的东西,但尽管它很酷,谁真正在乎呢? (2认同)

Dmi*_*kov 12

你不能移动鼠标但可以锁定它.注意:您必须在click事件中调用requestPointerLock.

小例子:

var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();
Run Code Online (Sandbox Code Playgroud)

文档和完整的代码示例:

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


San*_*rma 10

有趣的。由于前面提到的原因(垃圾邮件点击和恶意软件注入),这是不可能直接实现的,但考虑一下这个黑客,它给人留下了同样的印象:

第 1 步:隐藏光标

假设你有一个 div,你可以使用这个 css 属性来隐藏真正的光标:

.your_div {
    cursor: none
}
Run Code Online (Sandbox Code Playgroud)

第二步:引入伪光标

只需创建一个图像,一个看起来相似的光标,鼠标光标图像并将其放置在您的网页中,并带有position:absolute.

第 3 步:跟踪实际鼠标移动

这很容易。检查互联网如何获取真实的鼠标位置(X 和 Y 坐标)。

第四步:移动伪光标

当实际光标移动时,将伪光标移动相同的 X 和 Y 差异。同样,您始终可以使用 JavaScript 魔法在网页上的任何位置生成点击事件(只需在互联网上搜索操作方法即可)。

现在,您可以按照您想要的方式控制伪光标,并且您的用户将得到真实光标正在移动的印象。


公平警告:不要这样做。没有人希望他们的光标或计算机以这种方式控制,除非您有一些特定的用例,或者您决心逃离您的用户。


Cod*_*ith 9

所以,我知道这是一个古老的话题,但我首先要说这是不可能的.目前最接近的是将鼠标锁定到一个位置,并跟踪其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/