PointerEvent:persistentDeviceId 属性

实验性: 这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

persistentDeviceIdPointerEvent 接口的只读属性,用于标识生成 PointerEvent 的指向设备的唯一标识符。这提供了一种安全可靠的方法来识别多个同时与屏幕交互的指向设备(如笔)。

persistentDeviceId 在浏览会话的整个生命周期内保持有效。为了避免指纹/跟踪风险,指向设备在每次会话开始时会分配一个新的 persistentDeviceId

无法识别生成设备的指针事件会被分配 persistentDeviceId0

一个整数,如果无法识别生成 PointerEvent 的设备,则为 0

注意: 由于数字化仪和指向设备硬件的限制,并非所有指针事件都可能提供 persistentDeviceId,尤其是旧硬件。例如,指向设备可能无法及时向数字化仪报告其硬件 ID,以便 pointerdown 收到 persistentDeviceId:它最初可能为 0,并在笔划中稍后的事件中更改为有效值。

示例

假设以下 HTML

html
<canvas id="inking-surface" width="1280" height="720"></canvas>

以下 JavaScript 将不同的墨水颜色分配给与画布交互的唯一指针

js
const colorBlue = 0;
const colorGreen = 1;
const colorYellow = 2;
const colors = [colorBlue, colorGreen, colorYellow];

const pointerToColorMap = new Map();
const colorAssignmentIndex = 0;

const canvas = document.querySelector("#inking-surface");

// Listen for a pointerdown event and map the persistentDeviceId to a color
// if it exists and has not been mapped yet
canvas.addEventListener("pointerdown", (e) => {
  if (e.persistentDeviceId && !pointerToColorMap.has(e.persistentDeviceId)) {
    pointerToColorMap.set(e.persistentDeviceId, colors[colorAssignmentIndex]);

    // Bump the color assignment index and loop back over if needed
    colorAssignmentIndex = (colorAssignmentIndex + 1) % colors.length;
  }
});

// Listen for a `pointermove` and get the color assigned to this pointer
// if persistentDeviceId exists and the pointer has been color mapped
canvas.addEventListener("pointermove", (e) => {
  if (e.persistentDeviceId && pointerToColorMap.has(e.persistentDeviceId)) {
    const pointerColor = pointerToColorMap.get(e.persistentDeviceId);
    // Do some inking on the <canvas>
  }
});

规范

未找到规范

未找到 api.PointerEvent.persistentDeviceId 的规范数据。
检查此页面是否有问题 或为其贡献一个缺失的 spec_url mdn/browser-compat-data。还要确保该规范包含在 w3c/browser-specs.

浏览器兼容性

BCD 表仅在浏览器中加载