下一页显示了一个缩略图,单击该缩略图时,将显示带有视频的Bootstrap 3模式。它可以工作,但如果视频对于窗口来说太高,它会延伸到窗口下方,用户无法看到整个视频(并且必须滚动)。我试过各种调整大小的策略,但似乎都不起作用。感谢您的建议。URL模糊,抱歉。我需要使用Bootstrap 3。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script src="https://vjs.zencdn.net/7.8.4/video.js"></script>
<link href="https://vjs.zencdn.net/7.8.4/video-js.css" rel="stylesheet">
</head>
<body>
<a href="#" data-toggle="modal" data-target="#viewVideoModal" data-video-url="https://VIDEOFILE" class="video-link">
<img id="img-401" src="https://VIDEOFILE?thumb=1" height="280" width="157">
</a>
<div class="modal fade" id="viewVideoModal" tabindex="-1" role="dialog" aria-labelledby="viewVideoModalLabel">
<div class="modal-dialog" role="document" style="margin-top:50px;">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">
×
</span>
<span class="sr-only">
Close
</span>
</button>
</div>
<div class="modal-body" id="viewVideoBody"></div>
</div>
</div>
</div>
<script>
var player;
$('#viewVideoModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget); // Button that triggered the modal
var videoSrc = button.data('video-url');
var videoTag = document.createElement('video');
videoTag.setAttribute('class', 'video-js vjs-fluid center-block vjs-default-skin');
videoTag.setAttribute('controls', '');
videoTag.setAttribute('preload', 'auto');
videoTag.setAttribute('data-setup', '{}');
// Create a new source tag
var sourceTag = document.createElement('source');
sourceTag.setAttribute('src', videoSrc);
sourceTag.setAttribute('type', 'video/mp4');
// Append the source tag to the video tag
videoTag.appendChild(sourceTag);
// Get the modal body and clear its contents
var modalBody = document.getElementById('viewVideoBody');
modalBody.innerHTML = '';
// Append the video tag to the modal body
modalBody.appendChild(videoTag);
// Initialize the video player
player = videojs(videoTag);
});
</script>
</body>
</html>
2条答案
按热度按时间xcitsw881#
我决定采用以下解决方案。它并不完美,因为根据视频的宽高比,在视频的两侧或视频的上方和下方都有黑条。但除此之外,它的工作。
我对我发布的原始代码进行了3次修改。
width:80vw; height: 80vh
vjs-fluid
类更改为vjs-fill
videoModalBody
的宽度和高度设置为width:80vw; height: 80vh
下面是修改后的代码:
cngwdvgl2#
每次显示模态时,您都要创建一个新的
<video>
标记,并将其附加到模态主体。视频被设置为流体,这应该使其响应,但当视频尺寸超过视口高度时,模态似乎没有按预期响应。基于CSS的解决方案
使视频适合模态(和视口)的一种方法是通过使用CSS限制视频的高度,并确保视频保持其纵横比。CSS
max-height
和object-fit
属性在这里非常有用。首先,在HTML的
<head>
部分添加一个新的CSS类:接下来,使用这个类将
<video>
元素 Package 在<div>
中,因此像这样修改JavaScript代码:max-height
的80vh
值意味着视频将占据视口高度的80%。您可以根据需要调整此值。overflow: auto
将提供一个滚动条,以防视频高度仍然超过模态高度。object-fit: contain;
确保视频的宽高比保持不变。警告:Internet Explorer不支持
object-fit
。如果您需要支持IE,则可能需要找到不同的解决方案或使用polyfill。模态对话框现在大小正确,但视频现在有一个垂直滚动条。
我正在寻找(希望)的是一个解决方案,将调整视频,使没有滚动条。
如果你想调整视频大小以适应模态而不需要滚动条,你需要调整一下CSS和JavaScript。
首先,更新CSS,将
max-height
设置为100%
,将height
设置为auto
,用于.video-js
类:然后修改JavaScript。不要直接设置视频的高度,而是将模态体的高度设置为视口高度的百分比,然后让视频填充可用空间:
通过此调整,视频应填充模态体到其最大高度,并根据视口高度调整其大小。由于
vjs-fluid
类,视频将保持其宽高比。如果视频的宽高比与模态体的宽高比不匹配,模态体中可能有一些未使用的空间,但视频本身应该适合没有滚动条。
注意:
.modal-video-container
的height
的值80vh
可以根据您的需要进行调整。该值意味着模态体将是视口高度的80%。基于jQuery UI的解决方案
作为替代方案,假设您可以在项目中添加/使用jQuery UI,您可以考虑“Apply size of video element to bootstrap modal while scaling”。
这段jQuery代码使用jQuery UI库中的
.resizable()
function来调整模态内容的大小,并使用alsoResize
选项将相同的大小调整应用于视频元素。然后,它将一个函数绑定到
resizestop
事件,当用户停止调整元素大小时,该事件将被触发。此函数根据模态内容的新大小调整视频的高度和宽度,减去一些像素以解决填充问题。这将是:
值
-60
和-30
分别是要从计算的高度和宽度中删除的填充。确保将
"#video"
替换为视频元素的适当选择器。此外,您可能需要根据您的确切模态设计和布局调整填充值(-60
和-30
)。将这段新代码合并到前面的代码中,我们可以修改'show.bs.modal'事件,如下所示:
这段代码首先为
video
标记分配一个id 'video
',这样我们就可以在'shown.bs.modal
'事件中使用jQuery选择它。shown.bs.modal
事件是一个特定于Bootstrap的事件,它在模态对用户可见之后被激发。此时,我们可以调整视频大小以适应模态内容,同时考虑任何填充。同样,在resize函数中根据你的modal中的padding调整
-60
和-30
的值。如果没有任何填充,可以将这些值设置为0
。