PointerEvent: getCoalescedEvents() 方法
PointerEvent 接口的 getCoalescedEvents() 方法返回一个 PointerEvent 实例序列,这些实例被合并(coalesced)成单个 pointermove 或 pointerrawupdate 事件。用户代理会将多个更新合并成一个事件,而不是产生一个大量的 pointermove 事件流。这有助于提高性能,因为用户代理需要处理的事件更少,但跟踪的精细度和准确性会降低,尤其是在快速大幅度移动时。
getCoalescedEvents() 方法允许应用程序访问所有未合并的位置更改,以便在必要时精确处理指针移动数据。例如,在绘图应用程序中,未合并的位置更改是可取的,因为可以访问所有事件有助于构建更平滑的曲线,更好地匹配指针的移动。
有关合并事件的说明,请参阅 规范中的图 7。
语法
js
getCoalescedEvents()
参数
无。
返回值
PointerEvent 实例序列。
示例
HTML
html
<canvas id="target" width="600" height="300"></canvas>
JavaScript
js
const canvas = document.getElementById("target");
const ctx = canvas.getContext("2d");
const pointerEvents = [];
function drawCircle(x, y, color) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// draw the last 20 events
if (pointerEvents.length > 20) {
pointerEvents.shift();
}
pointerEvents.push({ x, y, color });
for (const pointerEvent of pointerEvents) {
ctx.beginPath();
ctx.arc(pointerEvent.x, pointerEvent.y, 10, 0, 2 * Math.PI);
ctx.strokeStyle = pointerEvent.color;
ctx.stroke();
}
}
canvas.addEventListener("pointermove", (e) => {
// draw a circle for the current event
drawCircle(e.clientX, e.clientY, "black");
const coalescedEvents = e.getCoalescedEvents();
for (let coalescedEvent of coalescedEvents) {
// give it an offset so we can see the difference and color it red
drawCircle(coalescedEvent.clientX + 20, coalescedEvent.clientY + 20, "red");
}
});
结果
规范
| 规范 |
|---|
| 指针事件 # dom-pointerevent-getcoalescedevents |
浏览器兼容性
加载中…