javascript - 如何防止触摸设备上按钮的粘性悬停效果

标签 javascript css hover touch

我创建了一个旋转木马,其中有一个始终可见的上一个和下一个按钮。这些按钮有一个悬停状态,它们变成蓝色。在 iPad 等触摸设备上,悬停状态是粘性的,因此按钮在点击后保持蓝色。我不想这样。

  • 我可以为每个按钮添加一个 no-hoverontouchend,然后 我的 CSS 是这样的: button:not(.no-hover):hover { background-color: 蓝色的; } 但这对性能来说可能很糟糕,而且不会 处理像 Chromebook Pixel 这样的设备(它既有 触摸屏和鼠标)正确。

  • 我可以将 touch 类添加到 documentElement 并制作我的 CSS 像这样: html:not(.touch) button:hover { background-color: blue; 但这也不适用于同时具有触摸和 鼠标。

我更喜欢删除悬停状态 ontouchend。但这似乎不可能。聚焦另一个元素不会移除悬停状态。手动点击另一个元素可以,但我似乎无法在 JavaScript 中触发它。

我找到的所有解决方案似乎都不完美。有没有完美的解决方案?

最佳答案

由于CSS Media Queries Level 4的这一部分|现在已经widely implemented since 2018 ,你可以使用这个:

@media (hover: hover) {
    button:hover {
        background-color: blue;
    }
}

或者用英文:“如果浏览器支持适当的/真实的/真实的/非模拟的悬停(例如,有一个类似鼠标的主要输入设备),那么当 button 悬停时应用这个样式结束了。”

对于没有实现此功能的浏览器(或在最初回答时没有),I wrote a polyfill来处理这个。使用它,您可以将上面的 future CSS 转换为:

html.my-true-hover button:hover {
    background-color: blue;
}

(.no-touch 技术的一种变体)然后使用来自同一 polyfill 的一些客户端 JavaScript 检测是否支持悬停,您可以切换 my -true-hover 相应的类:

$(document).on('mq4hsChange', function (e) {
    $(document.documentElement).toggleClass('my-true-hover', e.trueHover);
});

关于javascript - 如何防止触摸设备上按钮的粘性悬停效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233804/

相关文章:

javascript - knockout 搜索/过滤器

javascript - 有没有用 javascript 实现的 Java 字节码阅读器?

javascript - 图片未加载到网站上

javascript - jQuery 选择使 HTML DIV 可见

html - 表格中的 90 度文本旋转

javascript - 使用 Rails 4 应用程序实现 wrapbootstrap 主题的问题

悬停时带有 Logo 的 CSS 背景图片

css - 在 div 悬停时更改链接颜色

css - 当父级是 anchor 时,如何删除 flex 子级上的文本装饰下划线?

javascript - JQuery 滚动动画不粘在 DIV 内