Итерировать с использованием Array.forEach в JavaScript

Я хочу использовать эту функцию Fluid Player для каждого видео с одним и тем же именем класса. Я слышал, что могу сделать это с помощью метода Array.forEach(), но понятия не имею, как это сделать.

Я также пробовал использовать обычный цикл for и выполнять функцию Fluid Player для каждого элемента массива, но это не сработало.

Что я делаю неправильно?

<!DOCTYPE html>
<html>

<body>
	 <link rel = "stylesheet" href = "https://cdn.fluidplayer.com/v2/current/fluidplayer.min.css" type = "text/css"/>
	<script src = "https://cdn.fluidplayer.com/v2/current/fluidplayer.min.js"></script>
	<video class = "classname" id = "short" height = "225" loop  controls> 
  			<source src = "deja vu.mp4" type = "video/mp4"/>
	</video>
	<video class = "classname" id = "short" height = "225" loop  controls> 
  			<source src = "deja vu.mp4" type = "video/mp4"/>
	</video>
	<video class = "classname" id = "short" height = "225" loop  controls> 
  			<source src = "deja vu.mp4" type = "video/mp4"/>
	</video>

</body>

<script type = "text/javascript">
var array = document.getElementByClassName('classname');
Array.forEach(); 
</script>

<script type = "text/javascript">
	 var myFP = fluidPlayer(
        'short',
        {
            layoutControls: {
    fillToContainer: false,
    primaryColor: false,
    posterImage: false,
    autoPlay: false,
    playButtonShowing: true,
    playPauseAnimation: true,
    mute: false,
    logo: {
      imageUrl: null,
      position: 'top left',
      clickUrl: null,
      opacity: 1,
      mouseOverImageUrl: null,
      imageMargin: '2px',
      hideWithControls: false,
      showOverAds: false
    },
    htmlOnPauseBlock: {
      html: null,
      height: null,
      width: null
    },
    allowDownload: false,
    allowTheatre: false,
    playbackRateEnabled: false,
    controlBar: {
      autoHide: true,
      autoHideTimeout: 1,
      animated: false
    },
            },
            vastOptions: {
            }
        }
    );
</script>
</html>

Эээ ... можешь сказать нам, что ты хочешь сделать в итерации? Кроме того, getElementByClassName не возвращает массив, он возвращает объект HTMLCollection. Хотя в современных браузерах этот объект имеет метод forEach.

Teemu 28.12.2018 21:44

в массиве, который я сделал с помощью функции getElementByClassName

F.Hand 28.12.2018 21:46

Немного непонятно, о чем вы спрашиваете, может, поможет документация по для каждого ..?

Teemu 28.12.2018 21:48

Так возможно ли это сделать так, как я сейчас использую?

F.Hand 28.12.2018 21:48

Можете ли вы объяснить, какое действие вы хотите выполнять на каждой итерации цикла?

CertainPerformance 28.12.2018 21:49

Да, это возможно, но мы не знаем, что вы хотите делать в итерационном цикле.

Teemu 28.12.2018 21:49

Я хочу также выполнять функцию Fluidplayer для каждого видео, чтобы воспроизводить их в настраиваемом видеоплеере. Имя класса видео будет храниться в массиве, который я создал с помощью getElementByClassName.

F.Hand 28.12.2018 21:52

Ваш текущий вызов fluidPlayer(, похоже, не принимает никаких аргументов, связанных с элементами, хотя ...

CertainPerformance 28.12.2018 21:55

Затем вы передаете ссылку на эту функцию: array.forEach(fluidplayer); Обратите внимание, маленькая буква «a» в «массиве», т.е. вы должны выполнить метод forEach для самого объекта, а не с помощью функции конструктора массива. Кроме того, еще раз, getElementsByClassName не возвращает массив, он возвращает объект.

Teemu 28.12.2018 21:56

Насколько я знаю, я могу активировать функцию fluidPlayer (), указав идентификатор видео, который я установил (в данном случае я использую «short»). Он активирует только одно видео для воспроизведения в пользовательском плеере, а остальные воспроизводятся в глухом проигрывателе.

F.Hand 28.12.2018 21:59
Поведение ключевого слова "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
10
189
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Формулировка вашего вопроса немного сбивает с толку

«Я хочу использовать эту функцию Fluidplayer для каждого видео с одним и тем же именем класса»

что делать с каждым именем класса?

с точки зрения forEach.

forEach - это метод, который принимает функцию, вы можете либо передать ему функцию для выполнения на итерациях целевого массива, либо вы можете включить стрелочную функцию или анонимную функцию, например:

array.forEach(classname => console.info(classname)) 

// если array = [1,2,3,4], тогда это вернет 1, 2, 3 и 4 в отдельных строках.

Каждый элемент массива array будет повторяться, и функция будет вызываться один раз для каждого элемента, передавая элемент в функцию как classname, откуда мы можем делать с ним все, что захотим. Ваш массив называется «массив», поэтому мы используем метод прототипа forEach, который существует в каждом массиве javascript. Нам не нужно использовать массив. хотя есть некоторые методы, которые работают таким образом (например, Array.isArray (array) вернет true)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

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

У вас одинаковый идентификатор для всех видео, которые вы хотите использовать с Fluid Player. Помимо того, что это плохая практика (идентификаторы элементов должны быть уникальными), Fluid Player работает только с идентификатором, поэтому эти идентификаторы должны быть разными. Вы также используете несуществующий getElementByClassName(), вам нужно использовать getElementsByClassName().

getElementsByClassName() на самом деле не возвращает массив, он возвращает HTMLCollection, что не совсем то же самое. Вместо этого вы хотите использовать for x of y.

Попробуй это:

<!DOCTYPE html>
<html>

<body>
     <link rel = "stylesheet" href = "https://cdn.fluidplayer.com/v2/current/fluidplayer.min.css" type = "text/css"/>
    <script src = "https://cdn.fluidplayer.com/v2/current/fluidplayer.min.js"></script>
    <video class = "videoClass" id = "short1" height = "225" loop  controls> 
        <source src = "deja vu.mp4" type = "video/mp4"/>
    </video>
    <video class = "videoClass" id = "short2" height = "225" loop  controls> 
        <source src = "deja vu.mp4" type = "video/mp4"/>
    </video>
    <video class = "videoClass" id = "short3" height = "225" loop  controls> 
        <source src = "deja vu.mp4" type = "video/mp4"/>
    </video>
</body>

<script type = "text/javascript">
var vidCollection = document.getElementsByClassName('videoClass');
for (let vidElement of vidCollection) {
    fluidPlayer(
        vidElement.id,
        {
            layoutControls: {
                fillToContainer: false,
                primaryColor: false,
                posterImage: false,
                autoPlay: false,
                playButtonShowing: true,
                playPauseAnimation: true,
                mute: false,
                logo: {
                  imageUrl: null,
                  position: 'top left',
                  clickUrl: null,
                  opacity: 1,
                  mouseOverImageUrl: null,
                  imageMargin: '2px',
                  hideWithControls: false,
                  showOverAds: false
                },
                htmlOnPauseBlock: {
                  html: null,
                  height: null,
                  width: null
                },
                allowDownload: false,
                allowTheatre: false,
                playbackRateEnabled: false,
                controlBar: {
                  autoHide: true,
                  autoHideTimeout: 1,
                  animated: false
                },
            },
            vastOptions: {}
        }
    );
}
</script>
</html>

Я получил это сообщение в журнале консоли Uncaught TypeError: vidArray.forEach не является функцией

F.Hand 28.12.2018 22:08

Можете ли вы попробовать еще раз с обновленным именем класса videoClass в getElementsByClassName()?

markmoxx 28.12.2018 22:09

Извините, но я не понимаю, что вы имеете в виду. Я использую то же имя класса в getElementsByClassName (), что и в тегах HTML для видео.

F.Hand 28.12.2018 22:12

Ах, моя ошибка, getElementsByClassName не возвращает массив, он возвращает HTMLCollection, что не то же самое, что точно. Вместо этого вы хотите использовать let x of y - я обновлю свой ответ.

markmoxx 28.12.2018 22:20

Хорошо, теперь он работает. Большое спасибо за вашу помощь :)

F.Hand 28.12.2018 22:24

@ F.Hand Нет проблем. Просто примечание - атрибуты ID никогда не должны быть одинаковыми во всем документе, поскольку они обычно используются как идентификатор для определенного элемента.

markmoxx 28.12.2018 22:31

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