pointermove与mousemove事件除额外功能外的其他差异有哪些?
pointermove 与 mousemove 的核心差异(除额外功能外)
MDN提到pointermove与mousemove非常相似但功能更多,两者的差异不止于额外功能,核心区别如下:
触发场景的原生性差异:
mousemove仅针对鼠标设备触发,在触摸/手写笔设备上的mousemove是浏览器模拟生成的;而pointermove是原生支持所有指针设备(鼠标、触摸、笔)的移动事件,无需模拟,触发时机更精准,比如触摸设备上不会有模拟鼠标事件的延迟。多指针处理能力:
pointermove天然支持多指针输入(比如多点触摸),每个指针通过唯一的pointerId区分,可同时追踪多个指针的移动;而mousemove不支持多指针,多点触摸时仅能对应其中一个触摸点的模拟鼠标移动,无法区分多个指针。指针捕获机制的差异:
pointermove支持通过setPointerCapture()方法将指针事件绑定到指定元素,即使指针移出该元素,pointermove仍会持续触发在该元素上;mousemove没有类似的捕获机制,指针移出元素后就不再触发该元素的mousemove事件。事件对象的行为差异:
即使在鼠标场景下,两者事件对象的部分行为也不同。比如pointermove的事件对象包含pointerType(明确指示指针设备类型),而mousemove无法直接判断当前是真实鼠标还是模拟的触摸/笔;另外,pointermove的clientX/Y等坐标属性在指针捕获时始终基于捕获元素计算,而mousemove的坐标始终基于当前鼠标位置的文档坐标。
内容的提问来源于stack exchange,提问作者root
相关产品推荐
相关产品推荐

