禁用移动浏览器上的悬停效果背景解决方案说明替代解决方案延伸阅读
我正在编写一个网站,旨在从台式机和平板电脑上使用。当从桌面访问它时,我希望屏幕的可点击区域以效果(不同的背景颜色等)亮起。使用平板电脑,没有鼠标,所以我不想要任何悬停效果。:hover
问题是,当我在平板电脑上点击某些东西时,浏览器显然有某种“看不见的鼠标光标”,它会移动到我点击的位置,然后把它留在那里 - 所以我刚刚点击的东西会以悬停效果亮起,直到我点击其他东西。
如何在使用鼠标时获得悬停效果,但在使用触摸屏时禁止显示它们?
如果有人想建议它,我不想使用用户代理嗅探。同一设备可以同时具有触摸屏和鼠标(今天可能不那么常见,但将来会更常见)。我对设备不感兴趣,我对它目前的使用方式感兴趣:鼠标或触摸屏。
我已经尝试过挂接 ,和 事件并调用所有事件,这确实在某些时候会抑制“不可见的鼠标光标”;但是,如果我在两个不同的元素之间快速来回点击,在点击几下后,它将开始移动“鼠标光标”并照亮悬停效果 - 就像我并不总是受到尊重一样。除非有必要,否则我不会让你厌倦细节 - 我甚至不确定这是正确的方法;如果有人有更简单的解决方法,我全都洗耳恭听。touchstart
touchmove
touchend
preventDefault()
preventDefault
编辑:这可以用沼泽标准的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的鼠标事件。您可以使用它来查看 tap 事件也会触发 ,和 。mouseenter
mousemove
mouseleave