4

Woo Theme の Flexslider を使用して、複数の Vimeo ビデオでスライダーを作成しています。Froogaloop ($f) ライブラリを使用して、vimeo イベントに基づいて Flexslider を再生および一時停止することはできますが、Flexslider で次/前のイベントを取得してビデオを一時停止することはできません。

各 vimeo プレーヤーが変数としてハードコードされている場合は機能しますが、任意の数のビデオをサポートできるようにするにはスライダーが必要です。ここで例を参照してください: http://demo.astronautweb.co/slider/flex/vimeo-multi.html

Flexslider ページの例は、オブジェクトであるスライダー イベントをフックし$f(player)ます (私はそう思います)。これは、コードで使用するときに最後のスライドのみを対象としています。W

Flexslider 独自のslide.currentSlideを使用しようとすると、オブジェクトではなく要素のみをターゲットにできます。これは、私の JavaScript 知識の上限に達した場所です。

コードは次のとおりです。

$(window).load(function(){  

var vimeoPlayers = document.querySelectorAll('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) {
    (element.addEventListener) ? element.addEventListener(eventName, callback, false) : 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");
    });
}

var slider = $(".flexslider");

slider.flexslider({
    animation: "slide",
    animationLoop: true,
    slideshowSpeed: 5000,
    video: true, 
    start: function(slider){
        $('body').removeClass('loading');
    },
    before: function(slider){ 

        // this only pauses the last slide
        $f(player).api('pause');

        // this is the Flexslider API for targeting the current slide
        var currentSlide = slider.slides.eq(slider.currentSlide + 1),
            currentFrame = currentSlide.find('iframe');

        console.log(currentFrame);  
    }
});

});

4

1 に答える 1

3

astronautweb.co の例から、古いバージョンの Froogaloop API を使用しているようです。最新のものを入手すると、これがずっと簡単になるはずですhttps://github.com/vimeo/player-api/tree/master/javascript

// Enable the API on each Vimeo video
    $('iframe.vimeo-player').each(function(){
  $f(this).addEvent('ready');
});

// Call fitVid before FlexSlider initializes, so the proper initial height can be retrieved.
$(".flexslider")
    .fitVids()
  .flexslider({
    animation: "slide",
    slideshow: false,
    animationLoop: false,
    smoothHeight: true,
    start: function(slider) {
      $('body').removeClass('loading');
    },
    before: function(slider) {

      currentSlide = slider.currentSlide;
      player_id = currentSlide + 1
      currentVideo = 'player_' + player_id;

      $f(currentVideo).api('pause');

    }
});

Froogaloop API 2.0の別の例を次に示します。

于 2012-08-20T03:40:12.307 に答える