博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pointer Lock API
阅读量:5333 次
发布时间:2019-06-15

本文共 2464 字,大约阅读时间需要 8 分钟。

Pointer Lock API 提供了基于鼠标移动随着时间的增量。

是3D游戏最常见的方式,你可以通过鼠标来控制视角,消除了在一个方向上的移动限制。

基本概念

指针锁定和 鼠标捕获有关。鼠标获指的是当鼠标拖动的时候持续发送事件,但是当鼠标按钮被放开时它就会停止。

指针锁定相较鼠标捕获在以下方面有所不同:

  • 持久性。指针锁定不会释放鼠标,直到有一个明确的 API 调用或是用户使用一个专门的释放方法。
  • 不局限于浏览器或者屏幕边界。
  • 持续发送事件,而不管鼠标按钮状态。
  • 隐藏光标。

Function/Properties

requestPointerLock()

Pointer Lock API 通过添加一个新方法扩展了 dom元素 requestPointerLock()

element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;        element.requestPointerLock();

目前requestPointerLock()的实现和requestFullScreen以及Fullscreen API紧紧地绑在一起的。

保证在指针锁定之前进入了全屏模式。锁定指针的过程是异步。
使用pointerlockchangepointerlockerror事件表示请求成功或是失败了。

pointerLockElement/exitPointerLock()

Pointer Lock API 也扩展了 Document接口,添加了新的属性和方法。

新的属性被用来访问当前绑定的元素,并将元素命名为pointerLockElement

document.pointerLockElement = document.pointerLockElement || document.mozPointerLockElement || document.webkitPointerLockElement;        1.pointerLockElement可以用来确定是否有被指针锁定的元素        if(document.pointerLockElement){           }else {        }        2.pointerLockElement用来获取被指针锁定的元素        if (document.pointerLockElement === someElement) {        }

新的方法用来退出指针锁定

requestPointerLock()一样也是异步的,使用pointerlockchangepointerlockerror事件表示请求成功或是失败了。

document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock;        document.exitPointerLock();

pointerlockchange

当指针状态发生变化的时候。如requestPointerLock()exitPointerLock()时会触发pointerlockchange事件。这是一个简单事件所以不包含任何的额外数据。

  • Chromewebkitpointerlockchange
  • Firefoxmozpointerlockchange

pointerlockerror

当存在因调用错误requestPointerLock()或者exitPointerLock(),会触发pointerlockchange事件。这是一个简单事件所以不包含任何的额外数据。

  • Chromewebkitpointerlockerror
  • Firefoxmozpointerlockerror

鼠标事件扩展

Pointer lock API 使用 movement 属性扩展了标准的MouseEvent

movementXmovementY提供了鼠标在XY轴位置变化

锁定状态

当指针锁定被启动之后,正常的 MouseEvent 属性clientX, clientY, screenX, 和 screenY ,保持不变,就像鼠标没有在移动一样。 movementX 和 movementY 属性持续提供鼠标的位置变化。如果鼠标在一个方向上持续移动,movementX 和 movementY的值是没有限制的。不存在鼠标光标的概念,而且光标无法移到窗口之外,而且也不会被屏幕边缘所固定。

未锁定状态

无论鼠标锁定状态是怎样的,movementXmovementY 参数一直有效,并且为了方便起见,甚至在未锁定状态也是有效的。

当鼠标被解除锁定,系统光标可以退出并重新进入浏览器窗口。如果发生这种情况,movementX 和 movementY 可能会被设置成0。

iframe 的限制

指针锁定一次只能锁定一个 iframe。如果你锁定了一个 iframe,你不能试图锁定另外一个 iframe 然后把目标转移到这个 iframe 上;指针锁定将会出错。为了避免这一问题,首先解锁那个锁定的 iframe,然后再锁定另外一个。

iframe 默认的情况下, sandboxed iframes 会阻止指针锁定。避免这种限制的能力,即以属性/值 <iframe sandbox="allow-pointer-lock"> 组合的形式 , 有望很快在 Chrome 中出现。

转载于:https://www.cnblogs.com/chenjy1225/p/9661328.html

你可能感兴趣的文章
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>