一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情。
不常用的浏览器 API,本篇要介绍的 Pointer Lock 是一个实验性 API,目前浏览器兼容性一般,这个 API 是用来处理鼠标事件的,这个 API 比较特殊,和我们之前熟悉的鼠标事件很不一样,我们接下来具体看一下相关介绍。
设置了 Pointer Lock 后会进入指针锁定模式,这时会发生几个特别的变化:
- 鼠标光标隐藏。
- 不论鼠标按钮什么状态,都会持续收到事件回调。
- 鼠标事件不局限于浏览器和屏幕边界。
- 除非显示调用 API,否则不会释放鼠标。
我们可以想象到,在某些第一视角移动的应用中,比如 3D 场景移动,当用户点进去时候我们就想让图像跟着鼠标走,这时使用 Pointer Lock API 就可以很好的解决光标移动问题。
获取 Pointer Lock 我们需要调用对应 DOM 元素上的 requestPointerLock 方法,目前需要使用加前缀的 webkitRequestPointerLock 或 mozRequestPointerLock 方法,这个方法可以让元素进入指针锁定模式。但是目前只允许全屏元素进入 Pointer Lock 模式,因此在此之前需要先让元素进入全屏,这个我们在前面介绍过,调用 requestFullScreen 方法。
而对于其他部分的实现,Pointer Lock 也和 Full Screen 类似,我们可以在 document 上通过 pointerLockElement 来获取已经进入指针锁定模式的元素,之后可以通过 document 上的 exitPointerLock 来退出模式,当然这个方法也需要加前缀。
进入指针锁定模式后,我们还是通过熟悉的 mousemove 来监听,不过我们可以发现在回调的 event 上面有两个扩展属性 movementX 和 movementY,这两个可以读到实时变化的位置信息。
以上就是 Pointer Lock API,感兴趣可以尝试一下,限于浏览器支持情况,不建议上生产环境。