Импорт файла Javascript работает только один раз

У меня проблема с моим веб-сайтом, я использую javascript для отображения настроенного видеоплеера. Загружаю пару видео из базы и показываю их подряд, проблема в том, что javascript работает только для первого видео. Я знаю, что мне придется изменить, например, имена переменных, чтобы сценарий работал несколько раз, но есть ли другой способ загрузить один и тот же сценарий для каждого видеоэлемента?

Вот мой код для лучшего понимания:

        while ($row = mysqli_fetch_assoc($result))
            {
            $location = "../" . $row['pfad'] . $row['video'];
            $id = $row['id'];
            ?>
            <br>
            <p><?php echo "$row[titel]"; ?></p>

            <div class = "video-container">
                <div class = "c-video">
                    <video id = "video" class = "video" src = "<?php echo "$location"; ?>"></video>
                    <div class = "controls">
                        <div id = "process-bar" class = "process-bar">
                            <div id = "currentBuffer" class = "currentBuffer"></div>
                            <div id = "currentProcess" class = "currentProcess"></div>
                        </div>

                        <div class = "buttons">
                            <button id = "skip-back" class = "skip-back" data-skip = "-10"></button>
                            <button id = "play-pause"></button>
                            <button id = "skip-front" class = "skip-front" data-skip = "10"></button>
                            <span id = "videoCurrentTime" class = "videoTimer"></span> <span class = "videoTimer">/</span> <span id = "videoTime" class = "videoTimer"></span>
                            <button id = "sound" class = "highSound"></button>
                            <input type = "range" name = "volume" class = "volume-slider" id = "volume-slider" min = "0" max = "1" value = "1" step = "0.05">
                            <button id = "fullscreen" class = "fullscreen"></button>
                        </div>
                    </div>
                </div>
                <script type = "text/javascript" src = "../javascript/videoplayer.js"></script>
            </div>

            <br><br>
            <a href = "index.php?section=editVideo&login=success&id=<?php echo "$id"; ?>" class = "btn btn-warning">Video bearbeiten</a>
            &nbsp;&nbsp;&nbsp;
            <a href = "index.php?section=deleteVideo&login=success&id=<?php echo "$id"; ?>" class = "btn btn-danger">Video löschen</a>
            <br><br><br>
            <?php
            }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что ваш лучший вариант здесь — изменить то, как ваш 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 ищет внутри себя, чтобы найти и использовать свои дочерние элементы.

Затем вы можете поместить этот тег script в заголовок вашего документа вместо того, чтобы встраивать его в компонент видеоплеера:

<head>
  <script async src = "js/init.js" />
</head>

Обратите внимание: если таких элементов видеоконтейнера несколько, атрибуты id не будут работать, поскольку в документе может быть только один идентификатор каждого идентификатора. Но это нормально, потому что вы можете захватить контейнеры, а затем искать дочерние элементы по классам, как это делает мой пример кода.

Большое спасибо за такой быстрый ответ! :)

Cankar 10.04.2019 19:41

Другие вопросы по теме