2013-08-08 5 views
3

У меня есть видео с YouTube, которое я встроил в iFrame API youtube. Я хотел бы:Как отличить «искать» от «паузы» через YouTube Player IFrame API

  • показать полупрозрачный накладку, когда пользователь приостанавливает видео (работа)
  • скрыть, что наложение, когда пользователь воспроизводит видео (работа)
  • НЕ показывать накладку, когда пользователь «поиск» через органы управления с помощью трубки (ВОЗМОЖНО?)

Не удается контролировать поведение поиска. Является ли это возможным?

Чтобы воспроизвести, удерживайте поиск в том же положении в течение нескольких секунд и смотрите наложение. Пример jsfiddle здесь: http://jsfiddle.net/dNU84/3/

var ytvideo; 
window.onYouTubePlayerAPIReady = function() { 
    ytvideo = new YT.Player('ytvideo', { 
     width: '400', 
     height: '300', 
     videoId: 'BOksW_NabEk', 
     playerVars: { 
      'autoplay': 1, 
      'controls': 1 
     }, 
     events: { 
      "onStateChange": onPlayerStateChange 
     } 
    }); 
} 

function showOverlay() { 
    if ($('.video .video-overlay').length) $('.video .video-overlay').fadeIn(1200); 
} 

function hideOverlay() { 
    if ($('.video .video-overlay').length) $('.video .video-overlay').hide(); 
} 

var overlay; 
function onPlayerStateChange(event) { 
    console.log(event.data); 
    clearTimeout(overlay); 

    // youtube fires 2xPAUSED, 1xPLAYING on seek 
    if (event.data == YT.PlayerState.PAUSED) { 
     overlay = setTimeout(showOverlay, 1000); 
    } 
    if (event.data == YT.PlayerState.PLAYING) { 
     overlay = hideOverlay(); 
    } 
} 

ответ

2

Я знаю, что этот вопрос старый, но я просто искал решение этого, потому что я показываю оверлей при паузе, но наложение показывалось каждый раз, когда пользователь искал также из-за того, что оба значения событий равны 2.

Самым простым решением я сталкивался, чтобы установить один второй тайм-аут:

setTimeout(function() { 
    if (event.target.getPlayerState() == 2) { 
    // execute your code here for paused state 
    } 
}, 1000) 

Это будет только выполнять код на приостановленной, а не искать, потому что после того, как второй тайм-аут 1, PlayerState будет снова быть 1, если бы он искал пользователя.

+0

Это работает и должно быть текущим принятым ответом. – toddmetheny

+0

Блестящий! Я тоже боролся с этим. – disinfor

+0

Спасибо! если использовал 'event.data == YT.PlayerState.PAUSED', который не выполняет работу по поиску – Yannuth

6

К сожалению, YouTube API, игрок не имеет надежный способ сообщить о «искать» государства. Если вы заинтересованы, то вот ссылка на (старшем) объяснение, почему это так:

https://groups.google.com/forum/#!topic/youtube-api-gdata/1xGLZ54YOPI

Если у вас есть какие-либо желание использовать Chromeless игрока вместо установленного по умолчанию с элементами управления YouTube , вы можете обойти это ограничение, прослушивая события на вашем настраиваемом скруббере ... в качестве простого примера, слайдер jQuery UI можно настроить как скруббер для бесцветного проигрывателя и сообщить о состоянии поиска, используя «start», 'stop,' и 'slide'.

Смежные вопросы