我正在编写一个网站,该网站旨在用于台式机和平板电脑。当从桌面访问它时,我希望屏幕的可点击区域点亮:hover
效果(不同的背景颜色等)。平板电脑没有鼠标,所以我不想要任何悬停效果。
问题是,当我点击平板电脑上的某些东西时,浏览器显然有某种“隐形鼠标光标”,它会移动到我点击的位置,然后将其留在那里——所以我刚刚点击的东西会亮起悬停效果,直到我点击其他东西。
如何在使用鼠标时获得悬停效果,而在使用触摸屏时抑制它们?
如果有人想提出建议,我不想使用用户代理嗅探。同一个设备可以同时具有触摸屏和鼠标(今天可能不那么常见,但将来会更多)。我对设备不感兴趣,我对它目前的使用方式感兴趣:鼠标或触摸屏。
我已经尝试挂钩touchstart
,touchmove
和touchend
事件,并呼吁preventDefault()
对所有的人,这确实抑制“隐形鼠标”的一些时间; 但是如果我在两个不同的元素之间快速来回轻敲,轻敲几下后,它会开始移动“鼠标光标”并无论如何都会点亮悬停效果 - 就像我preventDefault
并不总是受到尊重。除非必要,否则我不会让你厌烦细节——我什至不确定这是正确的方法;如果有人有更简单的解决方法,我会全力以赴。
编辑:这可以用 bog-standard CSS 进行复制:hover
,但这里有一个快速复制供参考。
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
如果您将鼠标悬停在任何一个框上,它将获得我想要的蓝色背景。但是如果你点击其中一个框,它也会得到蓝色背景,这是我试图阻止的事情。
我还在此处发布了一个示例,该示例执行上述操作并挂钩 jQuery 的鼠标事件。您可以使用它来查看点击事件也将触发mouseenter
,mousemove
和mouseleave
。