PointerEvent:persistentDeviceId 属性
persistentDeviceId
是 PointerEvent
接口的只读属性,用于标识生成 PointerEvent
的指向设备的唯一标识符。这提供了一种安全可靠的方法来识别多个同时与屏幕交互的指向设备(如笔)。
persistentDeviceId
在浏览会话的整个生命周期内保持有效。为了避免指纹/跟踪风险,指向设备在每次会话开始时会分配一个新的 persistentDeviceId
。
无法识别生成设备的指针事件会被分配 persistentDeviceId
值 0
。
值
一个整数,如果无法识别生成 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 表仅在浏览器中加载