谢谢你看我的问题。对于一个作业,我需要迭代5个视频在一个JQuery手风琴。我们需要创建自己的按钮,它们有自己的功能。现在我有5div和不同的视频,然而,当我想播放第二个视频,第一个视频将开始播放。第三、第四和第五视频也是如此。
问题:如何更改我的代码,以便每个播放按钮都能为每个不同的视频工作?我猜是JQuery的每个函数,但我不知道。
<div id="video-wrap">
<div id="accordion">
<div class="acc-wrap"><img class="arrow" src="img/arrow.svg" alt="arrow">
<h3>Introduction</h3>
</div>
<div>
<div class="video-player" id="player-1">
<video id="my-video-1" class="video-js" preload="auto" width="1088px" height="612"
data-setup="{}">
<source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5
video</a>
</p>
</video>
<div class="player-buttons">
<a class="play-toggle" class="video-play">
<img class="pause" src="img/play-btn.svg" alt="pause button">
<img class="play" src="img/play-btn2.svg" alt="play button">
</a>
<a class="forward-btn">
<img src="img/forward btn.svg" alt="forward button">
</a>
<a class="rewind-btn">
<img src="img/rewind btn.svg" alt="forward button">
</a>
</div>
</div>
</div>
<div class="acc-wrap"><img class="arrow" src="img/arrow.svg" alt="arrow">
<h3>Daniel Shiffman: Coding Challenge 1</h3>
</div>
<div>
<div class="video-player" id="player-2">
<video id="my-video-2" class="video-js" preload="auto" width="1088px" height="612"
data-setup="{}">
<source src="video/citral.mp4" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5
video</a>
</p>
</video>
<div class="player-buttons">
<a class="play-toggle" class="video-play">
<img class="pause" src="img/play-btn.svg" alt="pause button">
<img class="play" src="img/play-btn2.svg" alt="play button">
</a>
<a class="forward-btn">
<img src="img/forward btn.svg" alt="forward button">
</a>
<a class="rewind-btn">
<img src="img/rewind btn.svg" alt="forward button">
</a>
</div>
</div>
</div>
<div class="acc-wrap"><img src="img/arrow.svg" alt="arrow">
<h3>Daniel Shiffman: Coding Challenge 2</h3>
</div>
<div>
<div class="video-player" id="player-3">
<video controls id="my-video-3" class="video-js" preload="auto" width="1088px" height="612"
data-setup="{}">
<source src="https://player.vimeo.com/video/420225730" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5
video</a>
</p>
</video>
<div class="player-buttons">
<a class="play-toggle" class="video-play">
<img class="pause" src="img/play-btn.svg" alt="pause button">
<img class="play" src="img/play-btn2.svg" alt="play button">
</a>
<a class="forward-btn">
<img src="img/forward btn.svg" alt="forward button">
</a>
<a class="rewind-btn">
<img src="img/rewind btn.svg" alt="forward button">
</a>
</div>
</div>
</div>
<div class="acc-wrap"><img src="img/arrow.svg" alt="arrow">
<h3>Daniel Shiffman: Coding Challenge 3</h3>
</div>
<div>
<div class="video-player" id="player-4">
<video controls id="my-video-4" class="video-js" preload="auto" width="1088px" height="612"
data-setup="{}">
<source src="https://player.vimeo.com/video/420225730" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5
video</a>
</p>
</video>
<div class="player-buttons">
<a class="play-toggle" class="video-play">
<img class="pause" src="img/play-btn.svg" alt="pause button">
<img class="play" src="img/play-btn2.svg" alt="play button">
</a>
<a class="forward-btn">
<img src="img/forward btn.svg" alt="forward button">
</a>
<a class="rewind-btn">
<img src="img/rewind btn.svg" alt="forward button">
</a>
</div>
</div>
</div>
<div class="acc-wrap"><img src="img/arrow.svg" alt="arrow">
<h3>Daniel Shiffman: Coding Challenge 4</h3>
</div>
<div>
<div class="video-player" id="player-5">
<video controls id="my-video-5" class="video-js" preload="auto" width="1088px" height="612"
data-setup="{}">
<source src="https://player.vimeo.com/video/420225730" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5
video</a>
</p>
</video>
<div class="player-buttons">
<a class="play-toggle" class="video-play">
<img class="pause" src="img/play-btn.svg" alt="pause button">
<img class="play" src="img/play-btn2.svg" alt="play button">
</a>
<a class="forward-btn">
<img src="img/forward btn.svg" alt="forward button">
</a>
<a class="rewind-btn">
<img src="img/rewind btn.svg" alt="forward button">
</a>
</div>
</div>
</div>
</div>
</div>// Play/pause toggle //
$('.play-toggle').click(function () {
if ($('.acc-wrap').hasClass("ui-state-active")) {
if (player.paused()) {
player.play();
$('.play').css({
"visibility": "visible",
});
$('.pause').css({
"visibility": "hidden",
});
} else {
player.pause();
$('.play').css({
"visibility": "hidden",
});
$('.pause').css({
"visibility": "visible",
});
};
};
});发布于 2020-05-30 10:57:42
我建议学习更多关于、范围、和类/对象原型的知识。
jQuery代码的问题是存在多个.play-toggle类,而且您目前无法识别这个播放按钮所属的正确视频。
如果将event参数传递到单击处理程序以标识实际单击的项目,则可以开始进行范围分析。
$('.play-toggle').click(function (event) {
console.log(event)
})在这里,您可以识别父容器,查找视频并将其挂钩到play暂停函数中。不过,我建议采取另一种办法。
步骤1:创建一个VideoPlayer类以容纳所有VideoPlayer功能
class VideoPlayer {
constructor(el) {
this._el = el
this._video = el.querySelector('video')
this._playToggle = el.querySelector('.play-toggle')
this.setupEventListeners()
}
setupEventListeners() {
this._playToggle.addEventListener('click',() => {
console.log(`play button clicked on element id ${this._el.id}`)
})
}
}如果您对类不确定,请阅读它们,这里我们将视频播放器元素的范围限定为变量并将它们保存为变量,然后初始化一个监听您单击事件的事件侦听器。您将在这个类中存储所有视频播放器功能。
步骤2:遍历页面并识别所有潜在的视频播放器
let videoPlayers = document.querySelectorAll('.video-player')在这里,我们知道所有的视频播放器都包装在父类video-player中,如果您console.log(videoPlayers),您应该看到一个元素数组
步骤3.为每个元素创建VideoPlayer类的实例
videos.forEach(v => new VideoPlayer(v))这将为您在VidePlayer中拥有的每个项创建一个新的videoPlayers类实例,现在如果单击play按钮,您将在play button clicked on element id (whatever id)控制台中看到一个日志。
再次在您的视频播放器类中,我将为您的按钮提供所有的逻辑,在这里您可以连接到任何您想要自定义视频播放器的HTML5视频事件。
请注意,您将不得不自己处理删除事件侦听器,这不是一个完整的答案,但应该给您足够的信息,如何解决您的问题。
https://stackoverflow.com/questions/62101060
复制相似问题