我正在尝试让我的一些图书馆使用触摸设备,但我很难弄清楚它们是如何被支持的以及它们是如何工作的.
基本上,有5个触摸事件,但似乎只有touchstart事件(duh)在移动浏览器中有共识.我创建了一个小提琴作为测试用例.
我已经在我的Galaxy Note上使用Android 4测试了这个,但您也可以通过桌面浏览器检查链接.
目标是试图弄清楚如何处理水龙头,双水龙头和长水龙头.没有什么花哨.
基本上,这是发生的事情:
在Android的浏览器的股票不会触发触摸事件.它只是试图模仿鼠标点击,水龙头,射击mousedown,mouseup和click事件连续,但双水龙头只是放大和缩小网页塔.
当手指触摸屏幕时,Chrome for Android会触发touchstart事件.如果它的发布很快,它触发那么mousedown,mouseup,touchend最后click事件.
在的情况下,长按后,在约半秒它激发mousedown和mouseup,和touchend当手指抬起时,没有click在结束事件.
如果你移动你的手指,它会发射touchmove几次事件,然后它会发射一个touchcancel事件,之后什么都不会发生,甚至touchend在举起手指时都不会发生.
一双击触发/缩小功能变焦,但事件明智它触发组合touchstart- touchevent两次,发射没有鼠标事件.
火狐为Android正确触发该touchstart事件,并在短击火灾的情况下mousedown,mouseup,touchend和click之后.
如果长时间点击,它会触发mousedown,mouseup最后 …
让我们假设我有一个网页,其中有一些onmouseover javascript行为来下拉菜单(或类似的东西)
显然,这不适用于iPad或智能手机等触控设备.
如何检测浏览器是否支持onmouseover或onmouseout等悬停事件以及CSS中的hover伪标记?
注意:我知道如果我对此感到担心,我应该以不同的方式编写它,但我很好奇是否可以进行检测.
编辑:当我说"支持悬停事件"时,我的意思是"浏览器是否有有意义的悬停事件表示".如果硬件支持它但软件不支持(反之亦然),则没有有意义的表示.除了一些即将推出的技术,我认为任何触摸设备都没有有意义的悬停事件表示.
我写了一个代码的和平,以触摸和非触摸为基础的事件.它适用于所有其他浏览器和设备,但Firefox.默认FF返回true.
var thumbsEvent, isTouch = Modernizr.touch; // detect the touch
if(isTouch){
thumbsEvent = 'click';//on touch surface, click
}
else {
thumbsEvent = 'mouseover';//on non touch surface, mouseover
}
Run Code Online (Sandbox Code Playgroud)
有没有办法管理这个问题.
我正在建立一个需要在PC,Mac和移动浏览器上进行触摸和鼠标交互的页面。
在用于touchStart,touchMove,touchEnd和touchCancel的事件处理程序方法中,我正在调用event.preventDefault以防止移动浏览器同时触发触摸和鼠标事件。
这对于mouseDown和mouseUp效果很好,当我触摸屏幕时它们不会被触发,但是由于某种原因,每次touchStart被触发后一小会儿(夫妇100ms),Android浏览器仍然会触发mouseMove事件(在第一个touchStart上) ,此mouseMove之前带有mouseOver)。如果我足够快地触摸,那么touchEnd之后会触发mouseMove(相对于touchStart而言具有相同的延迟)。
我真的很想防止触摸产生任何鼠标事件,并且我也想详细了解这里发生的事情,所以我有以下问题:
javascript ×4
touch ×3
firefox ×1
html5 ×1
mobile ×1
modernizr ×1
mousemove ×1
mouseover ×1
onmouseover ×1
touch-event ×1