Chrome 正在检测是否可以调用navigator.vibrate

l2osamch  于 2023-04-27  发布在  Go
关注(0)|答案(2)|浏览(153)

我最近注意到Chrome中弹出一个错误,告诉navigator.vibrate只能在用户与页面交互时调用:

我可以改变我的页面来请求用户交互(例如使用按钮),但我宁愿保持页面不变,但这样我就需要知道我是否可以调用navigator.vibrate。
我的第一个方法是在第一个touchstart事件后将布尔值设置为true:

let canVibrate = false;
document.addEventListener("touchstart", () => {
    if (canVibrate) {
        navigator.vibrate(200);
    } else {
        canVibrate = true;
    }
});

第一种方法在用户用一个手指触摸时起作用,因此可能在大多数情况下都是如此。
然而,如果用户在拉动手指之前放下另一个手指,这就不起作用了。在这种情况下,在移除所有手指之前,每次触摸都会弹出错误。然后,它仍然需要再触摸一次,好像所有这些都不算交互。
有没有什么javascript函数可以让我知道navigator.vibrate是否可以被调用?如果不能,有什么方法来测试它?

0kjbasz6

0kjbasz61#

MDN page for touch events为例
这会调用event.preventDefault()来阻止浏览器继续处理触摸事件(这也会阻止鼠标事件也被传递)。然后我们获取上下文并从事件的TouchEvent.changedTouches属性中提取更改的触摸点列表。
要将其放在一个示例中,您可以执行以下操作:

let canVibrate = false;
document.addEventListener("touchstart", (event) => {
    if (!canVibrate) {
        canVibrate = true
    }
    navigator.vibrate(200);
});
ljsrvy3e

ljsrvy3e2#

if ('vibrate' in navigator) {
}

相关问题