Несколько видео Vimeo с FlexSlider JS
Я надеюсь, что кто-то может помочь. Я искал и искал решение для этого, и я поиграл с Javascript, но это просто вне меня. Я надеюсь, что кто-то еще может понять это.
FlexSlider отлично работает как карусель, но если вам нужно несколько видео, я не могу заставить их остановить анимацию FlexSlider или остановить воспроизведение автоматически, если пользователь запускает следующий слайд карусели.
Это достаточно легко сделать с одним. Следующий Javascript показывает, как это делается. Но, как вы можете видеть, он опирается на элемент, имеющий идентификатор. Проблема в том, что у меня есть неизвестное количество видео. Иногда может быть один. Иногда их может быть 20.
Есть ли способ изменить код ниже, чтобы он мог обрабатывать любое количество видео?
var player = document.getElementById('player_1');
$f(player).addEvent('ready', ready);
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false)
} else {
element.attachEvent(eventName, callback, false);
}
}
function ready(player_id) {
var froogaloop = $f(player_id);
froogaloop.addEvent('play', function(data) {
$('.flexslider').flexslider("pause");
});
froogaloop.addEvent('pause', function(data) {
$('.flexslider').flexslider("play");
});
}
$(".flexslider").flexslider({
animation: "slide",
animationSpeed: Modernizr.touch ? 600 : 1000,
slideshowSpeed: 3500,
controlsContainer: "#carousel",
useCSS: false,
start: function(){
$(".flex-control-nav").css("margin-left", "-" + $(".flex-control-nav").width()/2 + "px");
},
before: function(slider){
$f(player).api('pause');
}
});
PHP/HTML выглядит так:
<div class="flexslider">
<ul class="slides">
<?php for($i=0;$i<$slideCount;$i++) { ?>
<li>
<?php if($slides[$i]["type"] == "1") { ?>
<div class="video">
<iframe id="player_1" width="1000" height="500" frameborder="0" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen src="http://player.vimeo.com/video/<?php echo $slides[$i]["URL"]; ?>?api=1&player_id=player_1"></iframe>
</div>
<?php } else { ?>
<a href="explore.php?item=<?php echo $slides[$i]["slideID"]; ?>">
<img src="static/images/slides/<?php echo $slides[$i]["slideID"]; ?>/<?php echo $slides[$i]["URL"]; ?>" alt="<?php echo htmlspecialchars($slides[$i]["headline"], ENT_QUOTES, "UTF-8"); ?>" width="868" height="488" /></a>
<?php } ?>
< /li>
</ul>
</div>
Возможное решение: запустите цикл FOR и посчитайте количество видео, затем создайте несколько разных экземпляров $f(player)
в JavaScript Есть ли способ лучше?
1 ответ
Я знаю, что вы сказали, что двигаетесь дальше, но мне было трудно заставить все видео автоматически останавливаться при переходе к следующему слайду, и я натолкнулся на этот код от Хуанфры Алдасоро ( http://juanfra.me/2012/08/flexslider-multiple-videos-v2/), который создает необходимый jQuery для каждого видео, тогда я считаю, что все, что осталось сделать, это подсчитать и присвоить имена идентификаторам iframe. Вот его код:
jQuery(window).load(function() {
var vimeoPlayers = jQuery('.flexslider').find('iframe'), player;
for (var i = 0, length = vimeoPlayers.length; i < length; i++) {
player = vimeoPlayers[i];
$f(player).addEvent('ready', ready);
}
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false)
} else {
element.attachEvent(eventName, callback, false);
}
}
function ready(player_id) {
var froogaloop = $f(player_id);
froogaloop.addEvent('play', function(data) {
jQuery('.flexslider').flexslider("pause");
});
froogaloop.addEvent('pause', function(data) {
jQuery('.flexslider').flexslider("play");
});
}
jQuery(".flexslider")
.flexslider({
animation: "slide",
useCSS: false,
animationLoop: false,
smoothHeight: true,
before: function(slider){
if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0)
$f( slider.slides.eq(slider.currentSlide).find('iframe').attr('id') ).api('pause');
}
});
});
Надеюсь, это поможет кому-то приземлиться здесь:)