Answers:
使用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>
但是,请确保您确实要隐藏光标。它真的可以惹恼人们。
1x1
px透明png或1%透明png。
document.body.style.cursor = 'auto'
。
尽管cursor: none
CSS解决方案绝对是一种可靠且简单的解决方法,但是如果您的实际目标是在使用Web应用程序时删除默认光标,或者实现您自己的原始鼠标移动解释(例如,对于FPS游戏),则可以想考虑改用Pointer Lock API。
您可以在元素上使用requestPointerLock删除游标,并将所有mousemove
事件重定向到该元素(您可能会也可能不会处理):
document.body.requestPointerLock();
要释放锁,可以使用exitPointerLock:
document.exitPointerLock();
无光标,真实
这是一个非常强大的API调用。它不仅使您的光标不可见,而且实际上删除了操作系统的本机光标。在释放指针锁定之前(在某些浏览器中使用或按下),您将无法选择文本或使用鼠标执行任何操作(除了侦听代码中的某些鼠标事件)。exitPointerLock
ESC
也就是说,您不能将光标留在窗口中以使其再次显示,因为没有光标。
限制条件
如上所述,这是一个非常强大的API调用,因此仅允许响应Web上的某些直接用户交互(例如单击)进行。例如:
document.addEventListener("click", function () {
document.body.requestPointerLock();
});
此外,除非设置了权限,requestPointerLock
否则无法在沙盒中工作。iframe
allow-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
事件,然后访问事件对象上的movementX
和movementY
属性,就可以侦听此事件:
document.body.addEventListener("mousemove", function (e) {
console.log("Moved by " + e.movementX + ", " + e.movementY);
});
对于整个HTML文档,请尝试以下操作
html * {cursor:none}
或者,如果某些CSS覆盖了您的光标:不使用!important
html * {cursor:none!important}