我正在使用videobox将流媒体嵌入我的网站,我刚刚发现当videobox处于“开启”状态时-即我点击了一个链接并使其出现并使周围变暗时-我仍然可以向下滚动并查看我的(非变暗)网站的其余部分。这会破坏沉浸感,我想禁用滚动,但只在videobox开启时禁用。
然而,我不知道从哪里开始。
然而,我不知道从哪里开始。
据我所知,你不能仅使用JavaScript来实现这个功能,因为onscroll
事件是不可取消的。
你可以通过将所有内容放在一个容器div
中,并设置容器div
的height
和width
为100%
,并在html
和body
元素上禁用溢出,这样你就可以在容器div
上显示滚动条。当你的视频框打开时,你可以打开一个覆盖层,将其后面的所有内容(包括容器上的滚动条)隐藏起来,并在其上方显示视频框。
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Prevent scrolling</title>
<style>
* { padding: 0; margin: 0; border: 0 }
html, body {
height: 100%;
overflow: hidden;
}
#container {
position: absolute;
height: 100%;
width: 100%;
overflow: auto;
}
#large-div {
background: #aaa;
height: 5000px;
width: 5000px;
}
#overlay {
position: absolute;
background: #fff;
opacity: 0.7;
-moz-opacity: 0.7;
-webkit-opacity: 0.7;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: alpha(opacity=70);
height: 100%;
width: 100%;
z-index: 1000;
display: none;
}
#videobox-container {
position: absolute;
background: #dd8;
width: 600px;
height: 400px;
top: 50%;
left: 50%;
margin: -300px 0 0 -200px;
z-index: 1001;
display: none;
}
</style>
</head>
<body>
<div id="container">
<div id="large-div"></div>
</div>
<div id="overlay"></div>
<div id="videobox-container"></div>
<script>
function showVideoBox() {
// show both overlay and videobox-container
document.getElementById("overlay").style.display = "block";
document.getElementById("videobox-container").style.display = "block";
}
showVideoBox();
</script>
</body>
</html>
(您需要稍微调整元素的位置,但是您已经明白了思路。)
在 videobox.js 文件中
替换第 80 行
this.overlay.setStyles({'top': window.getScrollTop()+'px', 'height': window.getHeight()+'px'});
使用这个:
this.overlay.setStyles({top:-$(window).getScroll().y,height:$(window).getScrollSize().y+$(window).getScroll().y});
本质上,这会获取“y”滚动条的高度,而不仅仅是屏幕显示的内容。
简单的解决方案是在视频开始播放时添加CSS body{overflow:hidden;}
,然后在播放结束后将其删除。此外,您可以不将视频框放在