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

📅  最后修改于: 2021-11-06 11:35:43             🧑  作者: Mango

当我们在 CSS 中为元素添加悬停效果时,它会停留在触摸设备中。在本文中,我们将学习如何解决这个问题。

有两种可能的方法来解决这个问题——

1. 不使用JavaScript:可以通过CSS中的媒体查询来解决。条件“悬停:悬停”是指支持悬停的设备。在此条件下使用媒体查询可确保仅在此类设备上添加以下 CSS。

代码片段:

@media(hover: hover) {
    #btn:hover {
        background-color: #ccf6c8;
    }
}

这仅在启用悬停的设备上添加悬停效果,这意味着不会在触摸设备上应用悬停效果。这里按钮的背景颜色在悬停时改变。

例子:



  

    

  

    

  

输出(在非触摸屏上):

由于没有悬停效果,该按钮在触摸设备上保持其原始状态。

2. 使用 JavaScript:在此方法中,我们将使用 JavaScript 来确定我们是否使用以下函数在支持触摸的设备上。当用户触摸一个元素时, ontouchstart事件返回 true。 navigator.maxTouchPoints返回设备支持的最大同时触摸点数。 navigator.msMaxTouchPoints也具有相同的函数,带有供应商前缀“ms”,用于目标浏览器 IE 10 及以下。

因此,如果设备启用了触摸功能,则给定的函数返回 true。 (要阅读有关该函数的更多信息,请参阅:https://www.geeksforgeeks.org/how-to-detect-touch-screen-device-using-javascript/)

function is_touch_enabled() {
    return ('ontouchstart' in window) ||
    (navigator.maxTouchPoints > 0) ||
    (navigator.msMaxTouchPoints > 0);
}

如果未启用触摸,我们向按钮添加一个类。此类向 CSS 中的按钮添加悬停效果,如下例所述:

例子:



  

    

  

    
  
    

  

输出(在非触摸设备上):

由于没有悬停效果,该按钮在触摸设备上保持其原始状态。