您可以使用window.pageXOffset 和window.pageYOffset 检查您的浏览器窗口垂直和水平滚动的距离。将这些与 window.innerWidth 和 innerHeight 以及一些基本的几何数学一起使用,以计算可见页面与视频本身重叠的程度。将这一切放在一个函数中,您可以将其附加到窗口对象上的scroll 和resize 事件,以便在每次滚动更改时运行检查。
这里是一些示例代码:
var video = document.getElementById('video'),
info = document.getElementById('info'),
fraction = 0.8;
function checkScroll() {
var x = video.offsetLeft,
y = video.offsetTop,
w = video.offsetWidth,
h = video.offsetHeight,
r = x + w, //right
b = y + h, //bottom
visibleX,
visibleY,
visible;
if (window.pageXOffset >= r ||
window.pageYOffset >= b ||
window.pageXOffset + window.innerWidth < x ||
window.pageYOffset + window.innerHeight < y
) {
info.innerHTML = '0%';
return;
}
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);
info.innerHTML = Math.round(visible * 100) + '%';
if (visible > fraction) {
video.play();
} else {
video.pause();
}
}
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
//one time at the beginning, in case it starts in view
checkScroll();
//as soon as we know the video dimensions
video.addEventListener('loadedmetadata', checkScroll, false);
还有一个working example。
此代码假定一个非常简单的页面布局。如果您的视频绝对定位在另一个设置了“位置:相对”的元素内,那么您需要做更多的工作来计算视频的正确位置。 (如果视频已使用 CSS 变换移动,情况也是如此。)