摘要

  • W3C 2012 年 12 月首份 Pointer Events 公开草案提出与硬件无关的指针事件,让鼠标、手指和笔有共同语言,同时照顾旧网页的鼠标事件。
  • 2015 年 2 月的推荐标准详细规定指针事件、pointerType、处理触摸默认手势的 touch-action,以及拖动越界后继续接收事件的指针捕获。

鼠标在网页里当了许多年熟客。按钮认得它的点击,滑块跟着它的箭头跑。手指到门口时,旧网页有时只认鼠标,浏览器便给手指套上一副“鼠标胡子”,发出兼容的鼠标事件。这让老页面还能动,却也把真实来客的身份藏了起来。等触控笔也进门,靠化装维持秩序就更费劲了。

W3C 于 2012 年 12 月 11 日发布的首份 Pointer Events 公开工作草案指出,多套设备事件会让开发者重复写交互逻辑。兼容鼠标事件又可能来自触摸,让代码难以判断究竟是哪种设备。草案提出“指针”:凡能指向屏幕位置的鼠标、笔、触摸接触,都能进入一套事件体系。

共同语言不等于把工具磨成同一个形状。PointerEvent 可以带上 pointerType、压力、接触面积、笔的倾角。普通按钮只需知道它被按下;绘图板则在乎笔尖压得多重、斜得多厉害。网站可以先写一条共同路径,再在需要精度时读出设备细节。俱乐部用同一张入场证,画家仍能带自己的笔。

到了2015 年 2 月 24 日的 W3C 推荐标准,事件家族包括 pointerdown、pointermove、pointerup、pointercancel,也有进出元素区域的事件。名字与鼠标事件相似,老手容易认路。指针标识能帮助页面跟住对应的接触,尤其在多个手指同时在场时。

老网页也需要一条过渡通道。推荐标准描述由指针输入产生兼容鼠标事件,让只听鼠标的页面继续工作。不过,这种兼容声响仍可能来自手指。新页面若想知道来客是谁,可以从指针事件的类型字段读取,不必通过一顶假胡子猜测。

触摸屏上最容易吵架的地方,是手指一动:它是在拖动页面里的卡片,还是想滚动整张页面?如果浏览器每走一步都要等网页脚本临时宣布是否取消动作,滚动便可能像拖一张沙发。touch-action 让网页先说明一个区域允许哪些默认触摸动作,浏览器据此安排滚动。双方各说清自己的工作,手指就不用站在走廊等裁判。

还有一个边界问题:你抓住滑块开始拖动,手指稍微滑出那个狭窄的矩形。指针捕获允许原来的元素继续收到该指针的事件,直到交互结束。2015 年文本写明如何设置和释放捕获,并用 gotpointercapture、lostpointercapture 通知状态变化。拖动不该因为手指走了一条风景路线就突然散场。

标准并未抹掉设备的性格。手指有接触面积,笔有压力和倾角,鼠标有按键状态。共同事件减少重复处理;专属属性让绘图、签名或精细控制仍能做好。网站无需在“只认鼠标”和“为每台设备重写一遍”之间二选一。

W3C 的 Pointer Events 1 发布历史记录了 2012 年首份公开草案和 2015 年推荐标准。文本从提议走到稳定规范,回应的是当时已经在发生的事:网页依旧带着鼠标时代的习惯,访客却开始直接用手和笔触碰屏幕。

读者不必记住事件名。按钮能按,页面能顺畅滚动,拖拽不会在边缘失踪,画笔也能表现轻重,这些才是那张通用入场证的效果。鼠标的老座位还在,只是门口终于不查尾巴了。