css 如何在2019年检测触摸设备?

rryofs0p  于 2023-04-23  发布在  其他
关注(0)|答案(3)|浏览(161)

对于我的应用程序,我需要从根本上改变整个用户体验的触摸设备使用屏幕键盘(如移动的,触摸电视)与鼠标/kbd设备(如桌面,移动与蓝牙鼠标/kbd)。
注意:我已经使用CSS网格和媒体查询来处理响应式布局,所以这方面已经解决了。我的问题不是布局,而是整个UX需要从根本上不同。到目前为止,我最好的选择是在整个视口上倾听鼠标移动。
如何使用现代浏览器实现此功能?
注意,我已经阅读了已有的答案,这些答案都是几年前的,通常得出的结论是,这是不可能的。

k3fezbri

k3fezbri1#

这很简单,只有一行代码:

const touch = matchMedia('(hover: none)').matches;
  • 什么?matchMedia
  • 这只是一个JS API来进行CSS @media查询。现代浏览器支持它:https://caniuse.com/#feat=matchmedia。当然,您可以直接在CSS中使用这样的查询:
@media (hover: none){
    /* touch stuff goes here */
}
  • 好吧,哪些@媒体查询可能也有用?
@media (hover: none) and (pointer: coarse) {
    /* touchscreens */
}
@media (hover: none) and (pointer: fine) {
    /* stylus */
}
@media (hover: hover) and (pointer: coarse) {
    /* controllers */
}
@media (hover: hover) and (pointer: fine) {
    /* mouse or touchpad */
}

但这只会查询到主输入法,如果想更深入,可以使用any-hoverany-pointer查询所有输入设备。
UPD:hack for old browsers removed,似乎大多数旧浏览器不支持hoverpointer媒体查询太多.您可以使用触摸事件检测和触摸只navigator属性从另一个答案
UPD 2:在您的情况下,最好使用

const touch = matchMedia('(hover: none), (pointer: coarse)').matches;
ffx8fchx

ffx8fchx2#

您可以在这里使用一个简单的条件使用Javascript进行检测

if(('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints > 0)) {
    //this is a touch device you can any action here 
}else {
    //it's not a touch device another code here
}

另外,下面的链接在这里https://ctrlq.org/code/19616-detect-touch-screen-javascript

umuewwlo

umuewwlo3#

在javascript中。

if ("ontouchstart" in document.documentElement)
    {
        document.write("your device is a touch screen device.");
    }
    else
    {
         document.write("your device is NOT a touch device");
    }

code pen

相关问题