javascript - 无法让我的 JS 函数(一次播放一个视频)进行滚动捕捉
问题描述
我有一个容器,它允许快速滚动到背景图像,所以一切都很好。我正在尝试将视频而不是图像添加到页面,但需要它们在用户向下浏览页面时一次触发一个。似乎快照滚动功能不允许我的视频自动播放。我不太确定问题出在哪里……
滚动快照代码:
const gra = function(min, max) {
return Math.random() * (max - min) + min;
}
const init = function(){
let items = document.querySelectorAll('bg-image');
for (let i = 0; i < items.length; i++){
items[i].style.background = randomColor({luminosity: 'light'});
}
}
滚动代码自动播放:
var videos = document.getElementsByClass("video"),
fraction = 0.8;
function checkScroll() {
for(var i = 0; i < videos.length; i++) {
var video = videos[i];
var x = video.offsetLeft, y = video.offsetTop, w = video.offsetWidth, h = video.offsetHeight, r = x + w, //right
b = y + h, //bottom
visibleX, visibleY, visible;
visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));
visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));
visible = visibleX * visibleY / (w * h);
if (visible > fraction) {
video.play();
} else {
video.pause();
}
}
}
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
解决方案
有视频自动播放政策更改生效(自 2019 年 1 月起),不允许在没有用户手势的情况下自动播放,感谢上帝!
这至少在 Chromium 浏览器中是有效的,我认为 Mozilla 也是如此。
您可以使用命令行参数覆盖该策略以测试您的代码,但如果它不能与其他人一起使用,那有什么好处。
https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
推荐阅读
- regex - RedirectMatch 301 多个子文件夹
- javascript - 返回函数使用闭包返回数组值
- swift - 如何使工具栏附加到底部 iOS Swift
- html - 将单个图像缩放成网格正方形?
- c - scanf 和 printf 没有按顺序执行
- reporting-services - SSRS 2015 在两次参数更改后挂起
- spring - Spring cloud config客户端找不到PropertySource
- apache-spark - Apache Spark 如何对大文件的数据进行分区
- java - 我可以在 Web 视图(android)中将 Applet 放入 html 代码中吗
- python - 调用存储函数或过程不会插入和保留更改