在https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_video下面试试:
<!DOCTYPE html>
<html>
<body>
<style>
div.outer { overflow: hidden }
div.outer > div.inner { position: relative; margin: 0 -109.7283%; padding: 88.8888888% 0; overflow: hidden }
div.outer > div.inner > iframe { position: absolute; top: 0; right: 0; bottom: 0; left: 0 }
</style>
<div class="outer">
<div class="inner">
<iframe width="100%" height="100%" src="https://drive.google.com/file/d/16iDKGJXBszk2nI9h9BNG3rJ2zD85FSNy/preview">
</iframe>
</div>
</div>
</body>
</html>
不过,它可能会扰乱视频播放。播放开始时,视频控件(进度条等)会被裁剪。
用我提供的代码替换那里的代码。
我刚刚检查了你的代码,看起来你需要的是:
.x { overflow: hidden }
.neg { position: relative; margin: 0 -109.7283; padding: 88.8888888% 0 }
.neg > iframe { position: absolute; top: 0; right: 0; bottom: 0; left: 0 }
外部 div 只使用 x 类,内部 div 只使用 neg 类。应该可以吧。
我曾考虑在播放时删除负边距,并且正在尝试一些类似的东西,但没有完成它。它应该在某种程度上可以工作,但我发现黑色边框的缩略图可能会在播放开始之前显示一小段时间(至少我尝试过的方式)。如果没问题,你可以试试那个方法。我想到的是显示一个覆盖 iframe 的不可见 div(透明覆盖),它可以捕获点击并将 iframe src 切换为 autoplay=1 URL。看看你能不能让它发挥作用。如果我有时间,我可能会进一步研究。
我正在使用与 iframe 相同样式的 JavaScript 添加一个 div,就在 iframe 之后:
.overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0 }
如果这个 div 是最后添加的,它已经是最顶层的了。否则,使用 z-index。
然后处理 div 上的 'click' 事件。
上面的 div 覆盖技术有它的局限性。以下技术可能会更好:
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<title>Player</title>
<div id="player"></div>
body { background: #efe; padding: 2em; color: #575 }
h1:first-child { margin-top: 0 }
.player, #player { overflow: hidden }
.player > div, #player > div { position: relative; padding: 88.88888% 0; overflow: hidden }
.player video, .player iframe,
#player video, #player iframe
{ position: absolute; top: 0; right: 0; bottom: 0; left: 0 }
.player:not(.playing) > div, #player:not(.playing) > div
{ margin: 0 -109.7283% }
((W, D) => {
let $ = a => document.getElementById(a)
class Player {}
Player.play = (id, url) => {
let p = $(id)
, f = D.createElement('iframe')
, d = D.createElement('div')
f.src = url
f.setAttribute('frameborder', 0)
f.height =
f.width = '100%'
f.addEventListener( 'mouseover', e => f.dataset.overMe = 1 )
f.addEventListener( 'mouseout', e => delete f.dataset.overMe )
W.addEventListener( 'blur', e => {
if (f.dataset.overMe === '1')
setTimeout(a => p.classList.add('playing'), 1000)
} )
p.innerHTML = ''
d.appendChild(f)
p.appendChild(d)
}
W.Player = Player
})(window, document);
Player.play('player', 'https://drive.google.com/file/d/16iDKGJXBszk2nI9h9BNG3rJ2zD85FSNy/preview')
看看您是否可以将此最新更新与多个 iframe 一起使用...
您的问题可能是因为您可能对所有播放器 div 使用了一个 id(可能是相同的 id)。当使用多个播放器 div 时,您需要使用唯一的 id,并为 div 使用 class="player" 而不是 id="player":
<div id="player-1" class="player"></div>
<div id="player-2" class="player"></div>
<div id="player-3" class="player"></div>
如果还是不行,给我看一个演示(也许在你的网站上),我会看看。调用 id like 的 play 方法
Player.play('player-1', 'https://drive.google.com/file/d/16iDKGJXBszk2nI9h9BNG3rJ2zD85FSNy/preview')
Player.play('player-2', 'https://drive.google.com/file/d/16iDKGJXBszk2nI9h9BNG3rJ2zD85FSNy/preview')