我最近注意到Chrome中弹出一个错误,告诉navigator.vibrate只能在用户与页面交互时调用:
我可以改变我的页面来请求用户交互(例如使用按钮),但我宁愿保持页面不变,但这样我就需要知道我是否可以调用navigator.vibrate。
我的第一个方法是在第一个touchstart事件后将布尔值设置为true:
let canVibrate = false;
document.addEventListener("touchstart", () => {
if (canVibrate) {
navigator.vibrate(200);
} else {
canVibrate = true;
}
});
第一种方法在用户用一个手指触摸时起作用,因此可能在大多数情况下都是如此。
然而,如果用户在拉动手指之前放下另一个手指,这就不起作用了。在这种情况下,在移除所有手指之前,每次触摸都会弹出错误。然后,它仍然需要再触摸一次,好像所有这些都不算交互。
有没有什么javascript函数可以让我知道navigator.vibrate是否可以被调用?如果不能,有什么方法来测试它?
2条答案
按热度按时间0kjbasz61#
以MDN page for touch events为例
这会调用event.preventDefault()来阻止浏览器继续处理触摸事件(这也会阻止鼠标事件也被传递)。然后我们获取上下文并从事件的TouchEvent.changedTouches属性中提取更改的触摸点列表。
要将其放在一个示例中,您可以执行以下操作:
ljsrvy3e2#