除非调整 window 大小,否则 matchMedia 不起作用

matchMedia doesnt work unless window is resized

我正在尝试使用 window.matchMedia 事件侦听器来检测用户是否在触摸设备上。但是我似乎只在 chrome DevTools window 调整大小时激活,而不是实际检测它是否是触摸设备(例如,在我的像素 3a 上)。

这是我用于事件侦听器的代码

if (matchMedia) {
        let mql = window.matchMedia('(pointer: fine)');
        mql.addListener(touchChange)
    }

及其运行的功能

function touchChange (event) {
if (event.matches) {
    touchcontrols = true;
    console.log("Touch Controls");
    console.log(window.innerWidth);
    document.getElementById("lives").innerHTML = "Touch Events!";
}

}

如果你只是想看看它是否匹配一次你可以使用:

let matches = window.matchMedia('(pointer: fine)').matches;

window.matchMedia returns 一个带有 matches 属性 的对象表示它当前是否与您的查询匹配,并且 addListener 用于注册回调被调用以响应媒体查询状态的变化。

更多相关信息:https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener