【发布时间】:2022-11-10 00:36:59
【问题描述】:
我有一个简单的网页,在轮播中的不同幻灯片中有多个 <video> 元素。当视频在轮播中的活动幻灯片中时,我.play()ing 视频和.pause()ing 所有其他人。我希望视频在静音状态下自动播放,并且完全了解每个浏览器的自动播放策略,但是即使在用户与网页交互之后(通过暂停/播放/取消静音播放的第一个视频),任何后续视频都不会播放由于错误而静音:
The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
在用户与页面交互后,使视频静音播放的正确方法是什么?
我创建了一个codesandbox to reproduce the issue。
var vid1 = document.getElementById("video1");
var vid2 = document.getElementById("video2");
var vid3 = document.getElementById("video3");
carousel.on("slideChange", function () {
vid1.currentTime = 0;
vid2.currentTime = 0;
vid3.currentTime = 0;
vid1.pause();
vid2.pause();
vid3.pause();
if (carousel.activeIndex === 0) {
var currentVideo = vid1;
var prevVideo = vid3;
} else if (carousel.activeIndex === 1) {
var currentVideo = vid2;
var prevVideo = vid1;
} else {
var currentVideo = vid3;
var prevVideo = vid2;
}
currentVideo.volume = 1;
currentVideo
.play()
.catch((e) => {
console.error(`Error playing: ${e.message}`);
currentVideo.muted = true;
return currentVideo
.play()
.catch((err) => console.error("Error caught again", err.message));
})
});
一些额外的观察:
- 这仅在 iOS 上发生。 Android 和桌面浏览器按预期工作。
- 在我播放并取消静音每个视频后,当重新访问该视频时,它将正常播放静音
【问题讨论】:
标签: javascript video mobile-safari swiper.js autoplay