是否可以使用CSS或Javascript将光标隐藏在网页中?

yey*_*man 121 html javascript css

我想在显示一个旨在在建筑大厅中显示信息的网页时隐藏光标.它根本不必是交互式的.我尝试使用cursor属性和透明光标图像,但我没有使它工作.

有人知道这是否可以做到?我想这可以被认为是一个用户的安全威胁,无法知道他在哪里点击,所以我不是很乐观......谢谢!

Luc*_*nes 189

使用CSS:

selector { cursor: none; }
Run Code Online (Sandbox Code Playgroud)

一个例子:

<div class="nocursor">
   Some stuff
</div>
<style type="text/css">
    .nocursor { cursor:none; }
</style>
Run Code Online (Sandbox Code Playgroud)

要在Javascript中的元素上设置它,您可以使用以下style属性:

<div id="nocursor"><!-- some stuff --></div>
<script type="text/javascript">
    document.getElementById('nocursor').style.cursor = 'none';
</script>
Run Code Online (Sandbox Code Playgroud)

如果你想在整个身体上设置它:

<script type="text/javascript">
    document.body.style.cursor = 'none';
</script>
Run Code Online (Sandbox Code Playgroud)

但是,请确保您确实要隐藏光标.它真的让人烦恼.

  • W3相当!World*World*Wide Web. (10认同)
  • 如何关注不支持CSS3的浏览器:使用`1x1` px透明png或1%透明度png. (4认同)
  • @MatthiasHerrmann:试试`document.body.style.cursor = 'auto'`。 (3认同)
  • 我不认为 W4 正式认可它 - 由于某种原因,它是每个浏览器都支持的“扩展”之一。 (2认同)

Joh*_*isz 23

指针锁API

虽然cursor: noneCSS解决方案绝对是一个简单易用的解决方法,但如果您的实际目标是在使用Web应用程序时删除默认光标,或者实现您对原始鼠标移动解释(例如,对于FPS游戏),您可能会我想考虑使用Pointer Lock API.

您可以在元素上使用requestPointerLock来删除游标,并将所有mousemove事件重定向到该元素(您可能会或可能不会处理):

document.body.requestPointerLock();
Run Code Online (Sandbox Code Playgroud)

要释放锁,可以使用exitPointerLock:

document.exitPointerLock();
Run Code Online (Sandbox Code Playgroud)

补充说明

没有光标,真的

这是一个非常强大的API调用.它不仅会使您的光标不可见,而且实际上会删除操作系统的本机光标.您将无法选择文本,或使用鼠标执行任何操作(除了在代码中侦听某些鼠标事件),直到指针锁被释放(通过使用exitPointerLock或按ESC某些浏览器).

也就是说,你不能让光标离开窗口再次显示,因为没有光标.

限制

如上所述,这是一个非常强大的API调用,因此只允许响应Web上的某些直接用户交互,例如点击; 例如:

document.addEventListener("click", function () {
    document.body.requestPointerLock();
});
Run Code Online (Sandbox Code Playgroud)

此外,除非设置了权限,requestPointerLock否则无法使用沙盒.iframeallow-pointer-lock

用户通知

有些浏览器会在锁定开始之前提示用户进行确认,有些浏览器会显示一条消息.这意味着在调用之后,指针锁可能不会立即激活.但是,通过监听调用pointerchange的元素上的事件,可以监听指针锁定的实际激活requestPointerLock:

document.body.addEventListener("pointerlockchange", function () {
    if (document.pointerLockElement === document.body) {
        // Pointer is now locked to <body>.
    }
});
Run Code Online (Sandbox Code Playgroud)

大多数浏览器只会显示一次消息,但Firefox偶尔会在每次调用时发送消息.AFAIK,这只能通过用户设置来解决,请参阅在Firefox中禁用指针锁定通知.

听原始鼠标移动

Pointer Lock API不仅会删除鼠标,而是将原始鼠标移动数据重定向到requestPointerLock调用的元素.只需使用该mousemove事件,然后访问事件对象的movementXmovementY属性即可收听此信息:

document.body.addEventListener("mousemove", function (e) {
    console.log("Moved by " + e.movementX + ", " + e.movementY);
});
Run Code Online (Sandbox Code Playgroud)


gas*_*par 10

如果你想隐藏整个网页中的光标,body除非它覆盖了整个可见页面,否则使用将不起作用,但情况并非总是如此。要确保光标在页面中的任何位置都隐藏,请使用:

document.documentElement.style.cursor = 'none';
Run Code Online (Sandbox Code Playgroud)

要重新启用它:

document.documentElement.style.cursor = 'auto';
Run Code Online (Sandbox Code Playgroud)

静态CSS表示法的类似物是html {cursor:none}(或者,取决于你到底想要什么* {cursor:none}/:root {cursor:none})。