JS:鼠标输入的触摸等效项
JS: Touch equivalent for mouseenter
是否有鼠标输入的触摸等效物。
我想检测用户是否在我的 DIV 上滑动。
我更喜欢直接取决于目标元素的解决方案,而不是基于具有重新计算位置等的父元素。
网站:http://dizzyn.github.io/piano-game/- 使用鼠标工作正常(鼠标向下滑动;不适用于触摸滑动)
谢谢
> 2019:是的:使用pointerenter
.
但是,默认情况下,触摸(或鼠标按下)会导致元素"捕获"指针,从而防止进一步的指针离开/输入事件,除非您显式释放捕获。
此外,您需要在相关元素上设置touch-action:none
,以避免浏览器拦截默认平移/缩放等的触摸。
例:
.CSS:
*{ touch-action: none; }
.JS:
let div = document.querySelector("div")
div.addEventListener("pointerdown",(e)=>{
console.log("down")
console.log("attempt release implicit capture")
div.releasePointerCapture(e.pointerId) // <- Important!
})
div.addEventListener("pointerenter",(e)=>{
console.log("enter")
})
div.addEventListener("pointerleave",(e)=>{
console.log("leave")
})
至少在Chrome中工作。不过在移动野生动物园 13 测试版中没有那么多......根据 w3c 规范,我相当确定它应该以这种方式工作。也许当iOS 13正式发布时,我们会清楚。[我已经提交了一个错误,看起来它正在被处理。
[更新:iOS 13 问题已修复。应该在Chrome/FF/Safari中工作]
查看以下事件:
touchstart
当用户与触摸表面接触并在事件绑定到的元素内创建触摸点时触发。
touchmove
当用户在触摸表面上移动触摸点时触发。
touchend
当用户从表面移除触摸点时触发。无论触摸点是在绑定到元素内部还是外部删除,例如,如果用户的手指首先滑出元素,甚至滑出屏幕边缘,它都会触发。
touchenter
当触摸点进入绑定到元素时触发。此事件不会冒泡。
touchleave
当触摸点离开绑定到元素时触发。此事件不会冒泡。
touchcancel
当触摸点不再在触摸表面上注册时触发。例如,如果用户已将触摸点移动到浏览器 UI 外部或插件中,或者弹出警报模式,则可能会发生这种情况。
特别是touchenter
和touchleave
.
资料来源:http://www.javascriptkit.com/javatutors/touchevents.shtml
对于尝试在 Web 应用程序中处理触摸事件的任何人,这里有有用的文档 W3C - 触摸事件,其中详细解释了事件及其处理方式。
WC3 指出:
如果 Web 应用程序可以处理触摸事件,则可以截获这些事件,并且用户代理不需要调度相应的鼠标事件。如果 Web 应用程序不是专门为触摸输入设备编写的,则可以改为对后续鼠标事件做出反应。
总之:
您只能处理相对于触摸事件的鼠标事件,而不能同时处理触摸和鼠标事件。
我只想对之前的海报说声谢谢。他的建议非常有效。几个星期以来,我一直在努力寻找解决方案。如果您在pointerdown
处理程序函数中使用 Svelte,我建议使用:
const pointerDownHandler = (event) => {
// whatever logic you need
event.target.releasePointerCapture(event.pointerId);
}
他说这部分是关键是准确的。没有它,它将无法工作。
在 Touchenter/Touchleave 問題上回答了這個問題。请检查。
https://stackoverflow.com/a/61179966/835753
伊恩的答案澄清一下:mouseenter
事件的等效项是pointerenter
事件。但它不会开箱即用。要使其正常工作,您应该:
- 使用
releasePointerCapture
方法添加到父元素pointerdown
事件侦听器
div.addEventListener("pointerdown",(e) => e.target.releasePointerCapture(e.pointerId))
- 添加到父级和元素
touch-action: none
CSS 属性。
享受:)
- 如何在jquery中找到鼠标滚轮/触摸移动事件的走向
- 当鼠标也在触摸另一个元素时,d3.js鼠标悬停事件未被触发
- 将触摸事件转换为鼠标事件仅每秒有效一次
- 如何在画布上绘制(使用鼠标/触摸)、保存绘制的对象、存储、加载和操作
- 在Windows8(HTML/JS)中,有什么方法可以区分触摸和鼠标交互吗
- 如何使用鼠标或触摸更改数字输入字段
- 如何在引导程序中通过触摸(或鼠标)启用幻灯片中的滑动图像
- Angular:模拟触摸设备上的鼠标离开
- 目标元素边缘的触摸启动会导致鼠标按下
- JS:鼠标输入的触摸等效项
- JS:如何识别鼠标事件是否由触摸(而不是鼠标)提供
- 带有 Firefox 的 Surface Pro 3 - 具有单点触摸触发器触摸/鼠标事件,而不是滚轮事件
- 如何使用 JavaScript 区分用户触摸的触摸板、触摸屏或鼠标
- 如何使用 Java 脚本转换鼠标事件和触摸事件
- 使用鼠标悬停打开/关闭导航,在移动设备上触摸
- 是否可以使用非鼠标、非触摸事件与 D3.js 图形进行交互?如果是这样,最有效的方法是什么
- AngularJS 事件,用于触摸等效于鼠标悬停
- 禁用预测滚动 - 鼠标滚轮 (OnScroll) 事件触发过于频繁(触摸板)
- Sencha触摸表单面板,不使用鼠标滚动
- 如何禁用/重新启用html元素及其子元素上的所有点击/触摸/鼠标事件