在这种情况下,为什么不将touchmove视为与文档的交互?

时间:2018-07-16 14:19:53

标签: javascript

我有这段代码可以在手机上开始播放视频。

document.addEventListener('touchmove', startVideo);

function startVideo() {
            const video = document.querySelector('.video');
            if(video.currentTime === 0 || video.paused) {
                setTimeout(() => {
                    video.play()},100);
            }
        }

它给我错误

  

未捕获(承诺)的DOMException:play()失败,因为用户   没有先与文档互动。

但是,如果我将touchmove更改为touchstart,它将按预期工作-视频开始点按播放。 为什么?并有一种方法可以解决它,使其可以与touchmove一起使用吗?

1 个答案:

答案 0 :(得分:0)

问题不是touchmove

原因是您在video.play()回调中调用setTimeout()。因此,当呼叫发生时,事件监听器已经返回。

您需要直接在事件监听器函数中调用它,而不是异步调用。

function startVideo() {
    const video = document.querySelector('.video');
    if(video.currentTime === 0 || video.paused) {
        video.play();
    }
}