Я думаю, что ваш лучший вариант здесь - это изменить способ, которым ваш JavaScript обращается к компонентам видеоплеера - один сценарий не может быть загружен несколько раз без махинаций, и это может вызвать конфликты и ошибки.
Я не знаю, как вы в настоящее время делаете это, но в качестве общего обзора, что вы можете сделать в своем JavaScript - это инициализировать все проигрыватели одним скриптом, который создает несколько экземпляров кода вашего видеоплеера. Примерно так:
// assuming you have jQuery, since that makes this example more concise
class VideoPlayer {
constructor(container) {
// find all the subcomponents
this.video = $(container).find('video').first()
this.processBar = $(container).find('div.process-bar').first()
this.buttons = $(container).find('div.buttons').first()
// ... etc, do that for all things here, bind click handlers, etc
}
}
// wait for the page to load so all video-container elements are on the page
// so find them, and create a new VideoPlayer for each.
window.addEventListener('load', () => {
const allVideos = []
$('div.video-container').each(function () {
allVideos.push(new VideoPlayer(this))
})
})
Этот код ищет все элементы div с классом video-container
, а затем создает новый VideoPlayer
с этим элементом контейнера. VideoPlayer
затем ищет внутри себя, чтобы найти и использовать свои дочерние элементы.
Затем вы можете поместить этот тег сценария в заголовок документа, а не встраивать его в компонент видеопроигрывателя:
<head>
<script async src="js/init.js" />
</head>
Как примечание, если имеется несколько таких элементов видео-контейнера, атрибуты id
не будут работать, так как в документе может быть только один из каждого идентификатора. Но это нормально, потому что вы можете захватить контейнеры, а затем искать детей по классам, как это делает мой пример кода.