2015-11-12 9 views
1

Я играю с видео встраиванием YouTube. Я хочу, чтобы игрок остановился на третьей секунде. Код ниже:JW Player 7 пауза в точное время

playerInstance.on('time', function(x) { 
    if (x.position === 3){ 
     playerInstance.pause(); 
    } 
}); 

Но он не работает каждый раз. Иногда это работает, а иногда и нет. Это совершенно случайно. Зачем?

ответ

1

В зависимости от типа воспроизводимого медиа и других событий, подключенных к экземпляру JW-плеера, событие onTime запускается несколько раз в секунду и сообщается многочисленным десятичным знакам.

Поэтому очень маловероятно, что «позиция» всегда будет ровно 3 (это то, что вы эффективно говорите со следующим: «== & '===').

Было бы более надежным использовать «> =»:

playerInstance.on('time', function(x) { 
    if (x.position >= 3){ 
     playerInstance.pause(); 
    } 
}); 

Однако, это как-это будет означать, что игрок не сможет играть за 3 секунды, поэтому в зависимости от ваших потребностей, вы также может потребоваться включить дополнительную логику, чтобы удовлетворить следующие:

  • продолжает играть после точки паузы
  • что делать, если пользователь ищет за 3 секунды
  • ищет назад и затем достигает точки паузы во второй раз
  • и т.д ...

Вероятно, лучшим решением было бы преобразовать «позицию» до целого значения и сделать прямое сравнение. Это означает, что вам не понадобится логика для обработки прогресса после точки паузы. Однако вам понадобится логика, чтобы убедиться, что она была приостановлена ​​только один раз в точке паузы. Для этого:

playerInstance.on('time', function(x){ 
    if(parseInt(x.position,10)===3){ 
     if(!playerInstance["pauseOnce"]){ 
      playerInstance["pauseOnce"]=true; 
      playerInstance.pause(); 
     } 
    }else{ 
     playerInstance["pauseOnce"]=false; 
    } 
}); 
+0

Я думаю, это было бы хорошим решением. Я пытался с> =, но не думал о включении дополнительной логики.Я думал, что точное положение сделает трюк. Но его работы случайны. – slk500

+0

Думая об этом дальше, я представил обновление с лучшим решением. – jherrieven

0

Я столкнулся с проблемами перед тем, как выбросить объект jwplayer в переменную. У меня нет объяснений, но я бы рискнул, что вам повезет, если вы просто продолжаете использовать jwplayer(); вызов явно. Надеюсь, это даст вам более последовательные результаты. Также, возможно, попробуйте использовать '==' вместо '==='. Можете ли вы показать нам, как вы объявляете playerInstance?

0

Я использовал рекомендованную заявление -. JW Player website Api

«Мы призываем разработчиков прекратить использование синтаксиса jwplayer(), и вместо того, чтобы сохранить ссылку на экземпляр проигрывателя На основании того, как JW Player 7 разработан, это будет реально сэкономить несколько мсек времени во время настройки проигрывателя ».

var playerInstance = jwplayer('container'); //jwplayer('container').pause(); // BAD! :( playerInstance.pause(); // Good :)

Я просто проверял свое решение только с jwplayer() декларации также с '==' & '==='. Но он все еще не работает.

Я приготовил для вас скрипку с нашей декларацией 2.

http://jsfiddle.net/slk500/rftbtzpr/

Спасибо за вашу помощь!