2016-03-07 2 views
1

Мы используем JPlayer 2.9.2 с очень простым прототипом (см. Фрагмент кода ниже).Почему jPlayer запускает событие паузы в конце воспроизведения дорожки

Когда трек заканчивается, происходит событие «пауза», а затем событие «закончено» в хроме, где, как и в Firefox, только событие «пауза» запускается.

Может ли кто-нибудь объяснить, почему это так?

Мы пропустили этот прототип, потому что в нашем производственном коде мы наблюдаем аналогичное запутанное поведение. Такие, как «пауза», стреляют по мобильным телефонам и «завершаются», стреляют на настольные компьютеры.

<head> 
 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jplayer/2.9.2/jplayer/jquery.jplayer.js"></script> 
 
<script type="text/javascript"> 
 
    $(document).ready(function(){ 
 
     $("#jquery_jplayer_1").jPlayer({ 
 
     ready: function() { 
 
      $(this).jPlayer("setMedia", { 
 
      title: "Bubble", 
 
      m4a: "http://www.jplayer.org/audio/m4a/Miaow-07-Bubble.m4a", 
 
      oga: "http://www.jplayer.org/audio/ogg/Miaow-07-Bubble.ogg" 
 
      }); 
 
     }, 
 
     cssSelectorAncestor: "#jp_container_1", 
 
     swfPath: "/js", 
 
     supplied: "m4a, oga", 
 
     useStateClassSkin: true, 
 
     autoBlur: false, 
 
     smoothPlayBar: true, 
 
     keyEnabled: true, 
 
     remainingDuration: true, 
 
     toggleDuration: true, 
 
\t \t ended : function(){ 
 
\t \t \t var sam = 1; 
 
\t \t }, 
 
\t \t pause : function(){ 
 
\t \t \t var sam = 2; 
 
\t \t }, 
 
\t \t 
 
     }); 
 
    }); 
 
    </script> 
 
</head> 
 
<body> 
 
<div id="jquery_jplayer_1" class="jp-jplayer"></div> 
 
<div id="jp_container_1" class="jp-audio" role="application" aria-label="media player"> 
 
    <div class="jp-type-single"> 
 
    <div class="jp-gui jp-interface"> 
 
     <div class="jp-volume-controls"> 
 
     <button class="jp-mute" role="button" tabindex="0">mute</button> 
 
     <button class="jp-volume-max" role="button" tabindex="0">max volume</button> 
 
     <div class="jp-volume-bar"> 
 
      <div class="jp-volume-bar-value"></div> 
 
     </div> 
 
     </div> 
 
     <div class="jp-controls-holder"> 
 
     <div class="jp-controls"> 
 
      <button class="jp-play" role="button" tabindex="0">play</button> 
 
      <button class="jp-stop" role="button" tabindex="0">stop</button> 
 
     </div> 
 
     <div class="jp-progress"> 
 
      <div class="jp-seek-bar"> 
 
      <div class="jp-play-bar"></div> 
 
      </div> 
 
     </div> 
 
     <div class="jp-current-time" role="timer" aria-label="time">&nbsp;</div> 
 
     <div class="jp-duration" role="timer" aria-label="duration">&nbsp;</div> 
 
     <div class="jp-toggles"> 
 
      <button class="jp-repeat" role="button" tabindex="0">repeat</button> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    <div class="jp-details"> 
 
     <div class="jp-title" aria-label="title">&nbsp;</div> 
 
    </div> 
 
    <div class="jp-no-solution"> 
 
     <span>Update Required</span> 
 
     To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>. 
 
    </div> 
 
    </div> 
 
</div> 
 
</body>

+0

Hi Dan. Вы когда-нибудь это понимали? –

+0

Нет, я тоже поднял ошибку на GitHub. Мысли? – Dan

+0

Не с головы. Согласно исходному коду, FireFox также должен запускать «Ended». Я собираюсь проверить это позже, когда у меня будет время. Вы можете связать ссылку github? Событие паузы запускается, потому что в противном случае щелчок на индикаторе выполнения будет воспроизводиться с этой точки, если это не так, поскольку оно остановило воспроизведение (взято из комментариев в коде src). Так должно случиться. –

ответ

0

Я просто проверял, и это работает для меня. Какую версию Firefox вы используете?

  • Хром: приостановлено -> закончено.
  • FireFox: Ended -> Paused.

http://jsfiddle.net/chq6uu16/13/

Исходный код jPlayer:

mediaElement.addEventListener("ended", function() { 
       if (entity.gate) { 
        // Order of the next few commands are important. Change the time and then pause. 
        // Solves a bug in Firefox, where issuing pause 1st causes the media to play from the start. ie., The pause is ignored. 
        if (!$.jPlayer.browser.webkit) { // Chrome crashes if you do this in conjunction with a setMedia command in an ended event handler. ie., The playlist demo. 
         self.htmlElement.media.currentTime = 0; // Safari does not care about this command. ie., It works with or without this line. (Both Safari and Chrome are Webkit.) 
        } 
        self.htmlElement.media.pause(); // Pause otherwise a click on the progress bar will play from that point, when it shouldn't, since it stopped playback. 
        self._updateButtons(false); 
        self._getHtmlStatus(mediaElement, true); // With override true. Otherwise Chrome leaves progress at full. 
        self._updateInterface(); 
        self._trigger($.jPlayer.event.ended); 
       } 
      }, false); 

Похоже различного упорядочения, в котором увольняют первым необходимо браузер исправить.

Кроме того, я так много раз слушал, что «Miaow-07-Bubble» мне сейчас очень нравится: P.