ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î

HTML5 Video - Audio CurrentTime - Ended ¹®Á¦Á¡
8³â Àü
ÃÖ±Ù °³¹ßÀÛ¾÷ Áß Samsung Galaxy S4(Android 4.4.2)ÀÇ WebView ¹× ±âº» Web Browser¿¡¼­ ¾Æ·¡¿Í °°Àº ¹®Á¦Á¡À¸·Î ÀÎÇÑ ¹ö±×°¡ Á¸ÀçÇÏ¿´°í, ±×¿¡ µû¸¥ ÇØ°á¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù.

HTML5ÀÇ Audio, Video ¿ä¼Ò¸¦ »ç¿ëÇÏ´Ù º¸¸é Ended Event ¹× Loop Atturibute°¡ ÀÛµ¿ÇÏÁö ¾Ê´Â Çö»óÀ» °Þ°Ô µË´Ï´Ù. ±× ÀÌÀ¯´Â ¾Æ·¡¿Í °°½À´Ï´Ù.
Element.currentTimeÀÇ °ªÀÌ milliseconds(1/1000ÃÊ)°¡ ¾Æ´Ñ picoseconds(1/1000000000000ÃÊ) ´ÜÀ§·Î ³ª¿À´Â Çö»óÀÌ ¹ß»ý ÇÔ
Element.duration °ªÀÇ Â÷ÀÌ ¹ß»ýÀ¸·Î ÀÎÇØ Loop, Ended µîÀÇ ±â´É ¿À·ù

ÇØ´ç ¹®Á¦¸¦ ÇØ°á Çϱâ À§Çؼ­´Â picoseconds(ÀÌÇÏ ps)¸¦ milliseconds(ÀÌÇÏ ms)·Î º¯°æ ÇØÁÖ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÕ´Ï´Ù.

ps¸¦ ms·Î º¯È¯ÇÏ´Â ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. JavaScript¿¡¼­ Á¦°øÇÏ´Â Number.prototype.toFixed ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ¼Ò¼öÁ¡ 3ÀÚ¸®¸¸ Ç¥½ÃÇØÁÖ¸é µË´Ï´Ù.
var ps = 1.000000000000
var ms = ps.toFixed(3); // 1.000

¶ÇÇÑ,½Ã½ºÅÛ¿¡¼­ ¹ß»ý ½ÃÄѾßÇÒ Ended Event°¡ ÀÛµ¿ÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ ºÎºÐÀ» µ¿ÀûÀ¸·Î È®Àå ¹× Custom Event È£ÃâÀÌ ÇÊ¿äÇÕ´Ï´Ù.
Cutsom Event¸¦ È£ÃâÇÏ´Â ÀÌÀ¯´Â ´ëºÎºÐÀÇ ºê¶ó¿ìÀúÀÇ °æ¿ì Ended Event°¡ Á¤»óÀÛµ¿Çϱ⠶§¹®¿¡ Event°¡ Áߺ¹À¸·Î È£ÃâµÉ °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù.

ÇØ´ç Cross-Browsing Trick ¿¡¼­´Â Ended Event ´ë½Å TimeUpdate Event¸¦ ÀÌ¿ëÇØ Finish Event¸¦ È£ÃâÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

À§ ³»¿ëÀ» Åä´ë·Î ÇÏ¿© ÀÛ¼ºµÈ JavaScript ¼Ò½ºÄÚµå´Â ¾Æ·¡¿Í °°½À´Ï´Ù. ¡°html5.media.cross.browse.js¡± ·Î ÀúÀåÇØÁÖ¼¼¿ä.
/* HTML5 Media Element Time Events Fix Kits */
(function(window, undefined){
  // Media Tag Names
  var media_tags = ['audio', 'video'];
  for(var type, type_id = 0; type = media_tags[type_id]; type_id++){
    // Get Media Element
    var tags = document.getElementsByTagName(type);
    // Each Media Element
    for(var media, index = 0; media = tags[index]; index++){
      // Binding Finish Event for Loop
      media.addEventListener('finish', function(e){
        var loop = !((this.loop === undefined) || (this.loop === false) || (this.loop === 'null'));
        if(loop) this.play();
      }, false);
      // Binding Loaded Data Event for AutoPlay
      media.addEventListener('loadeddata', function(e){
        var auto = !((this.autoplay === undefined) || (this.autoplay === false) || (this.autoplay === 'null'));
        if(auto) this.play();
      }, false);
      // Fix Media PicoSeconds Time Problems
      media.addEventListener('timeupdate', function(e){
        // Self - this function
        var callee = arguments.callee;
        // Cross-Browsing Timeout Callback
        callee.timeoutCB = function(){
          // Trigger Finish Event
          var eventCB = document.createEvent("HTMLEvents");
              eventCB.initEvent('finish', true, false);
          this.dispatchEvent(eventCB);
          // Trigger Ended Event - system base event function calling
          var eventOB = document.createEvent("HTMLEvents");
              eventOB.initEvent('ended', true, false);
          this.dispatchEvent(eventOB);
          // Reset Current Duration Time (once calling)
          this.addEventListener('play', function(){
            this.setCurrentTime(this.currentTime = 0);
            this.removeEventListener('play', arguments.callee);
          }, false);
        };
        // Save CurrentTime (ps to ms)
        callee.currentTime = Math.max(callee.currentTime || 0, this.currentTime).toFixed(3);
        // Calc RemainTime (Total Duration - Current Duration)
        if((callee.remainTime = parseFloat((this.duration - callee.currentTime).toFixed(3))) === 0){
          // Declare Methd : setCurrentTime(time)
          this.setCurrentTime = this.setCurrentTime || function(time){ this.currentTime = time; }
          // Reset Current Duration Time and Player State
          this.pause(); this.setCurrentTime(callee.currentTime = this.currentTime = 0);
          // ***JS Tricks, Blocking Duplicate Event Callback Function
          clearTimeout(callee.timeoutHandle);
          callee.timeoutHandle = setTimeout(callee.timeoutCB.bind(this), 100);
        }
      }, false);
    }
  }
})(window);

À§ ¼Ò½ºÄÚµå¿Í °°Àº °æ·Î¿¡ index.html¸¦ ¾Æ·¡¿Í °°ÀÌ ¸¸µé°í ¿À·ù°¡ ¹ß»ýÇÑ ´Ü¸»±â¿¡¼­ ¿­¾îº¸½Ã±â ¹Ù¶ø´Ï´Ù.
<!DOCTYPE HTML>
<html>
  <head>
    <title>HTML5 Media CurrentTime Problem ::: Ultimate;D ::: Cross-Browsing</title>
  </head>
  <body>
    <!-- Video ¼Ó¼ºÀÌ Á¤»óÀÛµ¿ÇÏ´ÂÁö È®ÀÎÇϱâ À§ÇÑ ¿ä¼Ò. -->
    <video id="video" src="http://www.w3schools.com/html/mov_bbb.mp4" controls="controls"></video>
    <script type="text/javascript">
      <!-- Finish À̺¥Æ®°¡ È£Ã⠵ǴÂÁö È®ÀÎÇϱâ À§ÇÑ ¿ä¼Ò. -->
      document.getElementById("video").addEventListener('finish', function(){
        alert('finish');
      }, false);
      <!-- Ended À̺¥Æ®°¡ È£Ã⠵ǴÂÁö È®ÀÎÇϱâ À§ÇÑ ¿ä¼Ò. -->
      document.getElementById("video").addEventListener('ended', function(){
        alert('ended');
      }, false);
    </script>
    <script type="text/javascript" src="html5.media.cross.browse.js"></script>
  </body>
</html>
ÃßõÃßõ : 1208 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
2,705
jQuery.getJSON, JSON µ¥ÀÌÅ͸¦ ·Îµå
2,704
jQuery length¿Í slideToggle ¿¹Á¦
2,703
[CSS] before¿Í after ¼±ÅÃÀÚ¸¦ ÀÌ¿ëÇÏ¿© Float ¼Ó¼º ÇØÁ¦
2,702
jQuery toggleClass() Methods
2,701
jQuery stop(),Callback,Chaining
2,700
jQuery Effects - Animation
2,699
jQuery Effects - Sliding
2,698
jQuery fadeIn(), fadeOut(), fadeToggle(), fadeTo()
2,697
jQuery hide(), show(), toggle()
2,696
jquery trigger(), ÇÔ¼ö ½ÇÇà½ÃÅ°±â
2,695
ºñ¹Ð¹øÈ£(Æнº¿öµå) À¯È¿¼º üũ (¹®ÀÚ, ¼ýÀÚ, Ư¼ö¹®ÀÚÀÇ Á¶ÇÕÀ¸·Î 6~16ÀÚ¸®)
2,694
PHP ¹®ÀÚ¿­¿¡ ÇѱÛÀÌ Æ÷ÇԵǾî ÀÖ´ÂÁö üũ
2,693
ÇѱÛüũ(preg match)
2,692
javascript escape/unescape -> php
2,691
Æú´õ¾ÈÀÇ ÆÄÀÏ °¡Áö°í ³î±â
2,690
Á¤±Ô Ç¥Çö½ÄÀ¸·Î ÇÑ±Û ¹®ÀÚ Æ÷ÇÔÇÏ´ÂÁö È®ÀÎÇϱâ
2,689
À¯´ÏÄڵ带 ÀÌ¿ë ÇÑ±Û Ãʼº, Áß¼º, Á¾¼ºÀ¸·Î ÂÉ°³±â - ÇѱÛ/¿µ¹® º¯È¯
2,688
ÇÑ±Û Ãʼº,Áß¼º,Á¾¼º ÀÚ¸£±â ÇÔ¼ö
2,687
ÆÄÀ̽㿡¼­ À¯´ÏÄÚµå ½ºÆ®¸² ´Ù·ç±â
2,686
Python 2.x ÇÑ±Û ÀÎÄÚµù °ü·Ã Á¤¸®
2,685
%uABCD%u1234 °°Àº urlÀÇ À¯´ÏÄÚµå µðÄÚµù
2,684
ÇѱÛ, ÇÑÀÚ¸¦ À¯´ÏÄÚµå·Î º¯È¯Çϱâ
2,683
°æ·Î ºÐ¸®Çϱâ
2,682
ÇÑ±Û ASCII Äڵ带 À¥ URL¿¡¼­ »ç¿ëµÇ´Â UTF8 ÄÚµå·Î º¯È¯
2,681
Unicode (UTF-8) ÀÎÄÚµù¿¡¼­ ÇÑ±Û ±ÛÀÚ¼ö Ãâ·Â ¹× iconv substr
2,680
PHP¿¡¼­ À¯´ÏÄÚµå·Î ¹®ÀÚ¿­ ÀÎÄÚµùÇϱâ
2,679
[JavaScript] µÚ·Î°¡±â È÷½ºÅ丮°¡ ¾ø´Â °ÍÀ» ¾î¶»°Ô ¾Ë ¼ö ÀÖÀ»±î?
2,678
htmlspecialchars, entity decode
2,677
Php : Finding Chrome and Safari Browsers
2,676
[Shoutcast] jPlayer and Shoutcast Configuration
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.