双指拖动时第二个触点抢走第一张卡,怎样按 pointerId 隔离状态

2026-10-24

以 pointerId 作为每条活动指针状态的键,分别处理进入、移动与结束。isPrimary 是某种指针类型里的主指针标志,既不是触点数量,也不应该被拿来覆盖所有人的拖动状态。

输入必须真的同时存在

附件通过Chromium CDP送入两个模拟触点,再同时把它们横向移动20像素,随后只结束第一个,最后结束第二个。中途检查Map里有两个不同id,第一条结束后还有一条,全部结束后才为空。把两个点击先后发出只能检验串行输入,无法揭露一个全局dragging对象被第二指覆盖的问题。

状态记录要跟随浏览器分配的id

CDP里的触点编号与浏览器PointerEvent暴露的pointerId不应硬编码成相同值。处理函数直接使用事件中的id创建和更新Map,结束时只删除对应项。若卡片只允许被一指拥有,还需另外记录卡片所有权;pointerId隔离解决的是输入流分离,不自动定义多人抢同一卡片时的业务规则。

不能只接收isPrimary那一条

只处理主指针适合某些明确单指的交互,但会有意忽略其他活动触点;要做双指缩放或多人互动就不能把它当过滤噪声的通用开关。主指针也按设备类型判定,鼠标与触摸等不同类型可以各有自己的主指针。日志保留primary字段仅用来观察,Map的键始终是pointerId。

实测范围怎样写清楚

这些输入经过浏览器触摸管线,却仍是自动化模拟,不能证明某块红外框的并发上限、掌压抑制或多人识别效果。现场应追加触点离开屏幕、系统取消和设备重连后的测试,结束路径同时覆盖pointerup与pointercancel。本题不解析TUIO alive、session或fseq;若上游协议发生残留,应回到对应协议层另查。

保留触点与卡片之间的映射

Map的值可以包含卡片编号、起点和本轮位移,而不是只有坐标。移动时先凭pointerId找到自己的记录,再计算对应卡片的新位置,避免每次都修改最后一次点击的全局卡片。若同一卡片不能同时被两指拖动,应在pointerdown时检查所有权并明确拒绝或加入手势;不要静默覆盖旧记录。取消后释放所有权也要按该id操作,避免一指结束清空其他人的状态。

下载并复现

下载原创HTML夹具、独立验证程序、本次执行记录和依赖与运行说明,放在同一目录。安装Playwright 1.58.0及其Chromium后运行 python verify.py;程序使用两个随机本地端口,自动关闭浏览器与服务,不请求外网或业务接口。

本次实际环境为Python 3.12.4、Playwright 1.58.0、Chromium 145.0.7632.6。Chromium CDP模拟触摸,经浏览器输入管线;非真实触摸硬件。断言已通过;完整事件和数值保留在执行记录,不能把它改名后当目标展项测量。

继续核查与一级出处

基础背景见触摸查询机无响应/漂移排查。每指状态隔离后,继续检查指针移出区域的捕获与结束,可继续用拖动展品卡片移出边框就断开,怎样验证 Pointer Capture 的捕获与释放取证;相关工程入口在专题与产品对接说明。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。