javascript - 在文档加载时在弹出窗口中显示和自动播放 youtube 视频
问题描述
我试图在文档加载 5 秒后在弹出窗口中自动播放 youtube 视频,不幸的是,它不起作用:
我从一个教程中获取了这段代码,视频在点击时播放,但我真正需要的是在页面加载后自动显示视频,而不需要用户进行任何操作。我尝试通过添加自己修改代码,$(document).ready
但不幸的是,它没有按预期工作。任何帮助将不胜感激 - 谢谢!
$(document).ready(function() {
setTimeout(function() {
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '315',
width: '560',
videoId: 'jNQXAC9IVRw',
events: {
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
//player is playing
} else {
//player is paused
}
}
function stopVideo() {
player.stopVideo();
}
function playVideo() {
player.playVideo();
}
function pauseVideo() {
player.pauseVideo();
}
$(document).on('opened.fndtn.reveal', '[data-reveal]', function() {
playVideo();
});
$(document).on('closed.fndtn.reveal', '[data-reveal]', function() {
pauseVideo();
});
}, 5000); // 5000 to load it after 5 seconds from page load
});
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<div id="myModal" class="reveal-modal" data-reveal>
<h2>Video</h2>
<div id="player"></div>
<a class="close-reveal-modal">×</a>
</div>
编辑
我已经添加了 jQuery,但视频没有加载也没有播放,任何帮助将不胜感激。
解决方案
你的意思是视频没有自动播放?这可能是因为自动播放政策
以下是上述链接的要点 -
Chrome 的自动播放策略很简单:
始终允许静音自动播放。
在以下情况下允许自动播放声音:
一个。用户与域进行了交互(单击、点击等)。
湾。在桌面上,用户的媒体参与指数阈值已被超过,这意味着用户之前播放过有声视频。
c.用户已将网站添加到移动设备的主屏幕或在桌面设备上安装了 PWA。
顶级框架可以将自动播放权限委托给其 iframe 以允许自动播放声音。
您可以将播放器静音以确保其自动播放。
我刚刚从youtube iframe_api 参考中复制了代码,并在播放器就绪时将播放器静音,它可以工作 -
请检查以下代码 -
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
body {font-family: Arial, Helvetica, sans-serif;}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
padding-top: 100px; /* Location of the box */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
/* Modal Content */
.modal-content {
background-color: #fefefe;
margin: auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
}
/* The Close Button */
.close {
color: #aaaaaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
</style>
<body>
<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<div id="player"></div>
</div>
</div>
<script>
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
event.target.playVideo();
player.mute();
}
// 5. The API calls this function when the player's state changes.
// The function indicates that when playing a video (state=1),
// the player should play for six seconds and then stop.
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
setTimeout(stopVideo, 6000);
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
$(document).ready(function() {
// When the user clicks anywhere outside of the modal, close it
$("#myModal").find(".modal-content .close").click(function(){
$("#myModal").hide();
});
setTimeout(function() {
$("#myModal").show();
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}, 5000); // 5000 to load it after 5 seconds from page load
});
</script>
</body>
</html>
相同的临时小提琴链接 - Youtube 视频静音自动播放
推荐阅读
- java - Java 移动对象(一个简单的机器模拟器)
- html - 包装时有没有办法改变物品的顺序?
- autohotkey - 为我的 AutoHotkey 功能使用加拿大多语言标准键盘时重新启用右键 Ctrl?
- python-3.x - 处理 webhook 时的并发问题
- java - 安装 e(fx)clipse 后我的 Eclipse 无法启动
- mysql - 在 WITH ROLLUP 上排序
- python - VAE 重建损失计算不正确
- sql - 别名的 Oracle 组
- c# - 将子弹分成 3 个不同的方向
- ruby-on-rails - DOM 完全加载后,如何让 turbolinks 运行函数?