【发布时间】:2021-08-29 00:18:06
【问题描述】:
当您点击红色播放时,视频会立即开始播放。你可以听到音乐和一切。
当您点击蓝色播放时,视频不会开始播放。视频没有开始播放,也没有音乐播放。
没有声音,点击蓝色播放后也没有音乐播放。视频应该在点击蓝色播放后立即开始播放。这正是它在红色播放上的工作原理。
单击蓝色播放应该与单击红色播放完全相同。
点击红色播放后,视频立即开始播放。
点击蓝色播放后,视频不开始播放。
点击运行不更新测试代码。
有人可以看看他们是否能够解决这个问题。
我怎样才能让第二个视频在被点击时开始播放?
它应该与点击Red播放相同。
在代码中,Red & Blue play 都使用.thePlay 作为一个类。
需要在代码中调整或更改哪些内容才能正常工作?
这是它的流程:
由于某种原因,它只允许 1st .thePlay 类在点击时播放,2nd .thePlay 视频类在您点击时不会启动它。也就是说,视频没有开始播放。
从这里开始:
function play() {
player.playVideo();
}
return {
addPlayer,
play
};
}());
到这里:
function onYouTubeIframeAPIReady() {
const cover = document.querySelector(".thePlay");
const wrapper = cover.parentElement;
const frameContainer = wrapper.querySelector(".video");
videoPlayer.addPlayer(frameContainer);
到这里:
(function initCover() {
function coverClickHandler() {
videoPlayer.play();
}
const cover = document.querySelector(".thePlay");
cover.addEventListener("click", coverClickHandler);
}());
完整代码:
const manageCover = (function makeManageCover() {
const config = {};
function show(el) {
el.classList.remove("hide");
}
function hide(el) {
el.classList.add("hide");
}
function hideAll(elements) {
elements.forEach(hide);
}
function showCovers(playButton) {
const cover = playButton.parentElement;
cover.classList.add("active");
show(cover);
}
function coverClickHandler(evt) {
hideAll(config.containers);
const cover = evt.currentTarget;
showCovers(cover);
}
function addClickToButtons(playButtons) {
playButtons.forEach(function addEventHandler(playButton) {
playButton.addEventListener("click", coverClickHandler);
});
}
function addCoverHandler(coverSelector, handler) {
const cover = document.querySelector(coverSelector);
cover.addEventListener("click", handler);
}
function init(selectors) {
config.containers = document.querySelectorAll(selectors.container);
const playButtons = document.querySelectorAll(selectors.playButton);
addClickToButtons(playButtons);
}
return {
addCoverHandler,
init,
show
};
}());
const videoPlayer = (function makeVideoPlayer() {
const players = [];
let playerVars = {};
let player = null;
const tag = document.createElement("script");
tag.src = "https://www.youtube.com/player_api";
const firstScriptTag = document.getElementsByTagName("script")[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onPlayerReady(event) {
player = event.target;
player.setVolume(100);
}
function addPlayer(video, settings) {
const playerVarDefaults = {
host: "https://www.youtube-nocookie.com",
videoId: video.dataset.id
};
playerVarDefaults.events = {
"onReady": onPlayerReady
};
playerVars = Object.assign(playerVarDefaults, settings);
players.push(new YT.Player(video, playerVars));
}
function play() {
player.playVideo();
}
return {
addPlayer,
play
};
}());
const managePlayer = (function makeManagePlayer() {
const defaults = {
height: 600,
width: 360
};
defaults.playerVars = {
controls: 1,
disablekb: 1,
enablejsapi: 1,
fs: 0,
iv_load_policy: 3,
rel: 0
};
function show(el) {
el.classList.remove("hide");
}
function createPlayerOptions(settings) {
function paramInOptions(opts, param) {
if (settings[param] !== undefined) {
opts[param] = settings[param];
delete settings[param];
}
return opts;
}
const optionParams = ["width", "height", "videoid", "host"];
const preferred = optionParams.reduce(paramInOptions, {});
const playerOptions = Object.assign({}, defaults, preferred);
// settings should now only consist of playerVars
const playerVars = Object.assign({}, defaults.playerVars, settings);
playerOptions.playerVars = playerVars;
return playerOptions;
}
function createPlayer(videoWrapper, settings = {}) {
const video = videoWrapper.querySelector(".video");
const playerOptions = createPlayerOptions(settings);
return videoPlayer.addPlayer(video, playerOptions);
}
function createCoverClickHandler(playerSettings) {
return function coverClickHandler(evt) {
const cover = evt.currentTarget;
const wrapper = cover.nextElementSibling;
show(wrapper);
const player = createPlayer(wrapper, playerSettings);
wrapper.player = player;
};
}
function addPlayer(coverSelector, playerSettings) {
const clickHandler = createCoverClickHandler(playerSettings);
manageCover.addCoverHandler(coverSelector, clickHandler);
}
return {
add: addPlayer
};
}());
function onYouTubeIframeAPIReady() {
const cover = document.querySelector(".thePlay");
const wrapper = cover.parentElement;
const frameContainer = wrapper.querySelector(".video");
videoPlayer.addPlayer(frameContainer);
managePlayer.add(".playa", {
height: 207,
start: 4,
width: 277
});
managePlayer.add(".playb", {
height: 207,
width: 277
});
manageCover.init({
container: ".container",
playButton: ".thePlay"
});
}
(function initCover() {
function coverClickHandler() {
videoPlayer.play();
}
const cover = document.querySelector(".thePlay");
cover.addEventListener("click", coverClickHandler);
}());
HTML
<div class="outer">
<div class="container with-curtain">
<svg class="playa thePlay" width="100%" height="100%" viewBox="0 0 64 64">
<path d="M25.6,46.4L44.8,32L25.6,17.6V46.4z M32,0C14.3,0,0,14.3,0,32s14.3,32,32,32s32-14.3,32-32S49.7,0,32,0z
M32,57.6C17.9,57.6,6.4,46.1,6.4,32S17.9,6.4,32,6.4S57.6,17.9,57.6,32S46.1,57.6,32,57.6z" />
</svg>
<div class="inner-container curtain curtain1">
<div class="ratio-keeper">
<div class="wrapa">
<div class="video video-frame" data-id="qe5WF4qCSkQ"></div>
</div>
<div class="panel-left"></div>
<div class="panel-right"></div>
</div>
</div>
</div>
<!-- end container -->
<div class="container with-curtain">
<svg class="playb thePlay " width="100%" height="100%" viewBox="0 0 64 64">
<path d="M25.6,46.4L44.8,32L25.6,17.6V46.4z M32,0C14.3,0,0,14.3,0,32s14.3,32,32,32s32-14.3,32-32S49.7,0,32,0z
M32,57.6C17.9,57.6,6.4,46.1,6.4,32S17.9,6.4,32,6.4S57.6,17.9,57.6,32S46.1,57.6,32,57.6z" />
</svg>
<div class="inner-container curtain curtain2">
<div class="ratio-keeper">
<div class="wrapa">
<div class="video video-frame" data-id="2VwsvrPFr9w"></div>
</div>
<div class="panel-left"></div>
<div class="panel-right"></div>
</div>
</div>
</div>
</div>
【问题讨论】:
-
如果我在 jsitor 上运行示例并单击红色按钮,它会播放视频。如果我重新运行示例并且这次单击蓝色按钮,它将播放视频。这不是预期的行为吗?如果是这样,那么我无法重现您的问题...
-
蓝色播放的视频没有立即开始播放,与红色相同。点击蓝色播放后,您听到声音了吗?
-
没有音频,点击蓝色播放后没有音乐播放。单击蓝色播放后,视频应立即开始播放。这正是它在红色游戏中的运作方式。
标签: javascript html css