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


129

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

有人知道这是否可以做到吗?我想这对于不知道他在哪里单击的用户来说可以看作是安全威胁,所以我不太乐观……谢谢!

Answers:


202

使用CSS:

selector { cursor: none; }

一个例子:

<div class="nocursor">
   Some stuff
</div>
<style type="text/css">
    .nocursor { cursor:none; }
</style>

要在Javascript中的元素上进行设置,可以使用style属性:

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

如果要对整个身体进行设置:

<script type="text/javascript">
    document.body.style.cursor = 'none';
</script>

但是,请确保您确实要隐藏光标。它真的可以惹恼人们。


效果很好!奇怪的是,我窥探了W3C规范(w3.org/TR/CSS2/ui.html),而他们对此一无所获。谢谢!
yeyeyerman

10
W3宁可!世界世界宽网站。
卢卡斯·琼斯

4
如何关心不支持CSS3的浏览器:使用1x1px透明png或1%透明png。
德里克·朕会功夫

1
据我所知,IE6支持透明的PNG,只要它是真实的透明而不是alpha通道透明即可。如有疑问,请使用测试套件:libpng.org/pub/png/pngsuite.html检查自己。

3
@MatthiasHerrmann:试试看document.body.style.cursor = 'auto'
卢卡斯·琼斯

30

指针锁定API

尽管cursor: noneCSS解决方案绝对是一种可靠且简单的解决方法,但是如果您的实际目标是在使用Web应用程序时删除默认光标,或者实现您自己的原始鼠标移动解释(例如,对于FPS游戏),则可以想考虑改用Pointer Lock API

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

document.body.requestPointerLock();

要释放锁,可以使用exitPointerLock

document.exitPointerLock();

补充笔记

无光标,真实

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

也就是说,您不能将光标留在窗口中以使其再次显示,因为没有光标。

限制条件

如上所述,这是一个非常强大的API调用,因此仅允许响应Web上的某些直接用户交互(例如单击)进行。例如:

document.addEventListener("click", function () {
    document.body.requestPointerLock();
});

此外,除非设置了权限,requestPointerLock否则无法在沙盒中工作。iframeallow-pointer-lock

用户通知

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

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

大多数浏览器只会显示一次消息,但是Firefox偶尔会在每次调用时向其发送垃圾邮件。AFAIK,只能通过用户设置解决此问题,请参阅在Firefox中禁用指针锁定通知

聆听原始的鼠标移动

指针锁定API不仅会删除鼠标,还会将原始鼠标移动数据重定向到requestPointerLock调用的元素。只需使用mousemove事件,然后访问事件对象上的movementXmovementY属性,就可以侦听此事件:

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

1
谢谢你 我发现这是切换到全屏幻灯片放映时消除SPA中光标的唯一可靠方法。
Velojet

1

我用透明的* .cur从1px到1px做到了,但它看起来像小点。:(我认为这是我能做的最好的跨浏览器操作。CSS2.1的'cursor'属性没有值'none'-CSS3中添加了它。这就是为什么它不是在所有地方都可行的原因。


4
请改用1%透明度.png / .cur。
德里克·朕会功夫

1

如果要在CSS中执行此操作:

#ID { cursor: none !important; }

7
您通常应该避免!important
卡·斯蒂布


0

如果要在整个网页中隐藏光标,body除非覆盖整个可见页面,否则使用不会起作用,这种情况并非总是如此。要确保光标隐藏在页面中的所有位置,请使用:

document.documentElement.style.cursor = 'none';

要重新启用它:

document.documentElement.style.cursor = 'auto';

静态CSS符号的模拟是通过回答帕维尔Salaquarda(实质:html * {cursor:none}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.