> 웹 프론트엔드 > H5 튜토리얼 > HTML5 모바일 개발을 향한 Xiaoqiang의 길(5) – 아름다운 비디오 플레이어 만들기

HTML5 모바일 개발을 향한 Xiaoqiang의 길(5) – 아름다운 비디오 플레이어 만들기

黄舟
풀어 주다: 2018-05-24 14:40:02
원래의
11447명이 탐색했습니다.

이전 기사에서는 HTML5의 특징과 숙지해야 할 기본 지식을 소개했습니다. 이제 HTML5의 장점을 실제로 경험해 보기 전에 걱정하지 마세요. 만들기를 시작해 보세요. 먼저 동영상 파일에 대한 기본 지식을 이해해 볼까요?

1. 비디오 형식

현재 더 주류이며 일반적으로 사용되는 비디오 형식은 avi, rmvb, wmv, mpeg4, ogg 및 webm입니다. 이 비디오는 비디오, 오디오 및 인코딩 형식의 세 부분으로 구성됩니다. HTML5에는 현재 브라우저에 따라 다양한 인코더 세트가 있습니다.

H.264(개인적으로는 낙관적이지 않음): 이 인코더는 Apple 휴대폰을 포함한 Apple 시스템의 인코더이며 특허를 보유하고 있습니다. 비디오 인코더. 인코딩 및 전송 프로세스의 모든 부분에 대해 로열티가 부과될 수 있습니다. 따라서 Safari(Apple의 브라우저)와 Internet Explorer에서는 이 인코더를 지원하지만, 오픈소스가 대세로 자리잡고 있는 현재 브라우저에서는 여전히 특허료를 청구하고 있다는 점은 그다지 낙관적이지 않습니다.

Theora: 이는 특허가 없는 인코딩 형식이자 모든 수준의 인코딩, 전송 및 재생을 위한 무료 비디오 인코더입니다. Chrome, Firefox 및 Opera는 이 인코더를 지원합니다.

VP8: 이 비디오 인코더는 Theora와 유사하지만 소유자가 Google이고 오픈 소스이므로 특허료가 필요하지 않습니다. Chrome, Firefox 및 Opera는 이 인코더를 지원합니다.

AAC: 오디오 코덱, H.264와 동일하며 이 오디오 코덱에는 특허 제한이 있으며 Safari, Chrome 및 Internet Explorer가 이 오디오 코덱을 지원합니다.

MP3: 또한 특허 기술인 Safari, Chrome 및 Internet Explorer가 이 오디오 인코더를 지원합니다.

PCM: 아날로그-디지털 변환기로 인코딩된 완전한 데이터를 저장하는 오디오 CD에 데이터를 저장하는 형식입니다. 따라서 중국 무손실 인코더의 파일 크기는 일반적으로 AAC 및 MP3 파일의 몇 배입니다. Safari, Firefox 및 Internet Explorer는 이 오디오 인코더를 지원합니다.

Vorbis: 파일 확장자는 .ogg이며 때로는 Ogg Vorbis라고도 합니다. 이 오디오 인코더는 특허로 보호되지 않으므로 저작권이 없습니다. 지원되는 브라우저에는 Chrome, Firefox 및 Opera가 포함됩니다.

주요 브라우저 및 장치에서 지원되는 비디오 및 오디오

HTML5 모바일 개발을 향한 Xiaoqiang의 길(5) – 아름다운 비디오 플레이어 만들기

2. HTML5의

html5에서는

<video src="move.mp4"></video>
로그인 후 복사

video 태그에는 다음과 같은 속성이 있습니다. 예를 들어, 컨트롤 속성은 콘솔이 있는지 여부를 제어할 수 있습니다.

<video src="move.mp4" controls="controls">  
    浏览器不支持HTML5的视频播放功能  
</video>
로그인 후 복사

위의 비디오 형식에서 다양한 브라우저가 다양한 비디오 형식을 지원한다는 것을 알 수 있으므로 태그를 사용하여 여러 형식으로 비디오를 지정할 수 있습니다. 기본적으로 브라우저는 자동으로 다운로드를 시작합니다. 파일의 유형을 결정합니다.

<video width="400" controls="controls">  
    <source src="move.mp4"  type="video/mp4" />  
    <source src="move.ogg"  type="video/ogg" />  
</video>
로그인 후 복사

3. 동영상 플레이어 만들기

index.html

<!DOCTYPE html>  
<html>  
<head>  
<title>Demo 1 | Custom HTML5 Video Controls with jQuery</title>  
<link rel="stylesheet" href="../vendorstyle.css" />  
<link rel="stylesheet" href="style.css" />  
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>  
<!--[if lt IE 9]>  
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>  
<![endif]-->  
<script src="../vendorscript.js"></script>  
<script src="video.js"></script>  
<!--[if lt IE 9]>  
<script>  
$(document).ready(function() {  
    $(&#39;.control&#39;).hide();  
    $(&#39;.loading&#39;).fadeOut(500);  
    $(&#39;.caption&#39;).fadeOut(500);  
});  
</script>  
<![endif]-->  
<link rel="shortcut icon" href="http://www.inwebson.com/wp-content/themes/inwebson/favicon.ico" />  
</head>  
  
<body>  
<!-- Header -->  
<header>  
    <h1>Custom HTML5 Video Controls with jQuery</h1>  
    <p id="backlinks">  
 <a href="http://www.inwebson.com/custom-html5-video-controls-with-jquery-and-css/">BACK TO ARTICLE »</a>  
        <a href="http://www.inwebson.com">Visit inWebson.com »</a>  
    </p>  
    <p class="clearfix"></p>  
</header>  
  
<!-- Content -->  
<section id="wrapper">  
  
    <!-- Title -->  
    <h2>Demo 1</h2>  
    <h3>Custom HTML5 Video Controls</h3>  
  
<p class="videoContainer">  
      
    <video id="myVideo" controls preload="auto" poster="poster.jpg" width="600" height="350" >  
      <source src="http://demo.inwebson.com/html5-video/iceage4.mp4" type="video/mp4" />  
      <source src="http://demo.inwebson.com/html5-video/iceage4.webm" type="video/webM" />  
      <source src="http://demo.inwebson.com/html5-video/iceage4.ogv" type="video/ogg" />  
      <p>Your browser does not support the video tag.</p>  
    </video>  
    <p class="caption">This is HTML5 video with custom controls</p>  
    <p class="control">  
  
        <p class="topControl">  
            <p class="progress">  
                <span class="bufferBar"></span>  
                <span class="timeBar"></span>  
            </p>  
            <p class="time">  
                <span class="current"></span> /   
                <span class="duration"></span>   
            </p>  
        </p>  
          
        <p class="btmControl">  
            <p class="btnPlay btn" title="Play/Pause video"></p>  
            <p class="btnStop btn" title="Stop video"></p>  
            <p class="spdText btn">Speed: </p>  
            <p class="btnx1 btn text selected" title="Normal speed">x1</p>  
            <p class="btnx3 btn text" title="Fast forward x3">x3</p>  
            <p class="btnFS btn" title="Switch to full screen"></p>  
            <p class="btnLight lighton btn" title="Turn on/off light"></p>  
            <p class="volume" title="Set volume">  
                <span class="volumeBar"></span>  
            </p>  
            <p class="sound sound2 btn" title="Mute/Unmute sound"></p>  
        </p>  
          
    </p>  
    <p class="loading"></p>  
</p>  
  
    <!-- Navigation -->  
    <nav id="navigation">  
        <ul>  
            <li class="currentbtn"><a href="#" title="Demo 1">DEMO 1</a></li>  
            <li><a href="../demo2/" title="Demo 2">DEMO 2</a></li>  
        </ul>  
        <p class="clearfix"></p>      
    </nav>  
</section>  
  
<!-- Footer -->  
<footer>  
    <span>© 2011 <a href="http://www.inwebson.com">inWebson.com</a>. 
    Design by <a href="http://www.inwebson.com/contactus">Kenny Ooi</a>. 
    Powered by <a href="http://www.inwebson.com/html5/">HTML5</a> and 
    <a href="http://www.inwebson.com/jquery/">jQuery</a>.</span>  
</footer>  
</body>  
</html>
로그인 후 복사

style.css

/* video container */  
.videoContainer{  
    width:600px;  
    height:350px;  
    position:relative;  
    overflow:hidden;  
    background:#000;  
    color:#ccc;  
}  
  
/* video caption css */  
.caption{  
    display:none;  
    position:absolute;  
    top:0;  
    left:0;  
    width:100%;  
    padding:10px;  
    color:#ccc;  
    font-size:20px;  
    font-weight:bold;  
    box-sizing: border-box;  
    -ms-box-sizing: border-box;  
    -webkit-box-sizing: border-box;  
    -moz-box-sizing: border-box;  
    background: #1F1F1F; /* fallback */  
    background:-moz-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-webkit-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-o-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
}  
  
/*** VIDEO CONTROLS CSS ***/  
/* control holder */  
.control{  
    background:#333;  
    color:#ccc;  
    position:absolute;  
    bottom:0;  
    left:0;  
    width:100%;  
    z-index:5;  
    display:none;  
}  
/* control top part */  
.topControl{  
    height:11px;  
    border-bottom:1px solid #404040;  
    padding:1px 5px;  
    background:#1F1F1F; /* fallback */  
    background:-moz-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-webkit-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-o-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
}  
/* control bottom part */  
.btmControl{  
    clear:both;  
    background: #1F1F1F; /* fallback */  
    background:-moz-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-webkit-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
    background:-o-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);  
}  
.control p.btn {  
    float:left;  
    width:34px;  
    height:30px;  
    padding:0 5px;  
    border-right:1px solid #404040;  
    cursor:pointer;  
}  
.control p.text{  
    font-size:12px;  
    font-weight:bold;  
    line-height:30px;  
    text-align:center;  
    font-family:verdana;  
    width:20px;  
    border:none;  
    color:#777;  
}  
.control p.btnPlay{  
    background:url(control.png) no-repeat 0 0;  
    border-left:1px solid #404040;  
}  
.control p.paused{  
    background:url(control.png) no-repeat 0 -30px;  
}  
.control p.btnStop{  
    background:url(control.png) no-repeat 0 -60px;  
}  
.control p.spdText{  
    border:none;  
    font-size:14px;  
    line-height:30px;  
    font-style:italic;  
}  
.control p.selected{  
    font-size:15px;  
    color:#ccc;  
}  
.control p.sound{  
    background:url(control.png) no-repeat -88px -30px;  
    border:none;  
    float:right;  
}  
.control p.sound2{  
    background:url(control.png) no-repeat -88px -60px !important;  
}  
.control p.muted{  
    background:url(control.png) no-repeat -88px 0 !important;  
}  
.control p.btnFS{  
    background:url(control.png) no-repeat -44px 0;  
    float:right;  
}  
.control p.btnLight{  
    background:url(control.png) no-repeat -44px -60px;  
    border-left:1px solid #404040;  
    float:right;  
}  
.control p.lighton{  
    background:url(control.png) no-repeat -44px -30px !important;  
}  
  
/* PROGRESS BAR CSS */  
/* Progress bar */  
.progress {  
    width:85%;  
    height:10px;  
    position:relative;  
    float:left;  
    cursor:pointer;  
    background: #444; /* fallback */  
    background:-moz-linear-gradient(top,#666,#333);  
    background:-webkit-linear-gradient(top,#666,#333);  
    background:-o-linear-gradient(top,#666,#333);  
    box-shadow:0 2px 3px #333 inset;  
    -moz-box-shadow:0 2px 3px #333 inset;  
    -webkit-box-shadow:0 2px 3px #333 inset;  
    border-radius:10px;  
    -moz-border-radius:10px;  
    -webkit-border-radius:10px;  
}  
.progress span {  
    height:100%;  
    position:absolute;  
    top:0;  
    left:0;  
    display:block;  
    border-radius:10px;  
    -moz-border-radius:10px;  
    -webkit-border-radius:10px;  
}  
.timeBar{  
    z-index:10;  
    width:0;  
    background: #3FB7FC; /* fallback */  
    background:-moz-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);  
    background:-webkit-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);  
    background:-o-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);  
    box-shadow:0 0 1px #fff;  
    -moz-box-shadow:0 0 1px #fff;  
    -webkit-box-shadow:0 0 1px #fff;  
}  
.bufferBar{  
    z-index:5;  
    width:0;  
    background: #777;  
    background:-moz-linear-gradient(top,#999,#666);  
    background:-webkit-linear-gradient(top,#999,#666);  
    background:-o-linear-gradient(top,#999,#666);  
    box-shadow:2px 0 5px #333;  
    -moz-box-shadow:2px 0 5px #333;  
    -webkit-box-shadow:2px 0 5px #333;  
}  
/* time and duration */  
.time{  
    width:15%;  
    float:right;  
    text-align:center;  
    font-size:11px;  
    line-height:12px;  
}  
  
/* VOLUME BAR CSS */  
/* volume bar */  
.volume{  
    position:relative;  
    cursor:pointer;  
    width:70px;  
    height:10px;  
    float:right;  
    margin-top:10px;  
    margin-right:10px;  
}  
.volumeBar{  
    display:block;  
    height:100%;  
    position:absolute;  
    top:0;  
    left:0;  
    background-color:#eee;  
    z-index:10;  
}  
  
/* OTHERS CSS */  
/* video screen cover */  
.loading, #init{  
    position:absolute;  
    top:0;  
    left:0;  
    width:100%;  
    height:100%;  
    background:url(loading.gif) no-repeat 50% 50%;  
    z-index:2;  
    display:none;  
}  
#init{  
    background:url(bigplay.png) no-repeat 50% 50% !important;  
    cursor:pointer;  
}
로그인 후 복사

video.js

$(document).ready(function(){  
    //INITIALIZE  
    var video = $(&#39;#myVideo&#39;);  
      
    //remove default control when JS loaded  
    video[0].removeAttribute("controls");  
    $(&#39;.control&#39;).show().css({&#39;bottom&#39;:-45});  
    $(&#39;.loading&#39;).fadeIn(500);  
    $(&#39;.caption&#39;).fadeIn(500);  
   
    //before everything get started  
    video.on(&#39;loadedmetadata&#39;, function() {  
        $(&#39;.caption&#39;).animate({&#39;top&#39;:-45},300);  
              
        //set video properties  
        $(&#39;.current&#39;).text(timeFormat(0));  
        $(&#39;.duration&#39;).text(timeFormat(video[0].duration));  
        updateVolume(0, 0.7);  
              
        //start to get video buffering data   
        setTimeout(startBuffer, 150);  
              
        //bind video events  
        $(&#39;.videoContainer&#39;)  
        .append(&#39;<p id="init"></p>&#39;)  
        .hover(function() {  
            $(&#39;.control&#39;).stop().animate({&#39;bottom&#39;:0}, 500);  
            $(&#39;.caption&#39;).stop().animate({&#39;top&#39;:0}, 500);  
        }, function() {  
            if(!volumeDrag && !timeDrag){  
                $(&#39;.control&#39;).stop().animate({&#39;bottom&#39;:-45}, 500);  
                $(&#39;.caption&#39;).stop().animate({&#39;top&#39;:-45}, 500);  
            }  
        })  
        .on(&#39;click&#39;, function() {  
            $(&#39;#init&#39;).remove();  
            $(&#39;.btnPlay&#39;).addClass(&#39;paused&#39;);  
            $(this).unbind(&#39;click&#39;);  
            video[0].play();  
        });  
        $(&#39;#init&#39;).fadeIn(200);  
    });  
      
    //display video buffering bar  
    var startBuffer = function() {  
        var currentBuffer = video[0].buffered.end(0);  
        var maxduration = video[0].duration;  
        var perc = 100 * currentBuffer / maxduration;  
        $(&#39;.bufferBar&#39;).css(&#39;width&#39;,perc+&#39;%&#39;);  
              
        if(currentBuffer < maxduration) {  
            setTimeout(startBuffer, 500);  
        }  
    };    
      
    //display current video play time  
    video.on(&#39;timeupdate&#39;, function() {  
        var currentPos = video[0].currentTime;  
        var maxduration = video[0].duration;  
        var perc = 100 * currentPos / maxduration;  
        $(&#39;.timeBar&#39;).css(&#39;width&#39;,perc+&#39;%&#39;);      
        $(&#39;.current&#39;).text(timeFormat(currentPos));   
    });  
      
    //CONTROLS EVENTS  
    //video screen and play button clicked  
    video.on(&#39;click&#39;, function() { playpause(); } );  
    $(&#39;.btnPlay&#39;).on(&#39;click&#39;, function() { playpause(); } );  
    var playpause = function() {  
        if(video[0].paused || video[0].ended) {  
            $(&#39;.btnPlay&#39;).addClass(&#39;paused&#39;);  
            video[0].play();  
        }  
        else {  
            $(&#39;.btnPlay&#39;).removeClass(&#39;paused&#39;);  
            video[0].pause();  
        }  
    };  
      
    //speed text clicked  
    $(&#39;.btnx1&#39;).on(&#39;click&#39;, function() { fastfowrd(this, 1); });  
    $(&#39;.btnx3&#39;).on(&#39;click&#39;, function() { fastfowrd(this, 3); });  
    var fastfowrd = function(obj, spd) {  
        $(&#39;.text&#39;).removeClass(&#39;selected&#39;);  
        $(obj).addClass(&#39;selected&#39;);  
        video[0].playbackRate = spd;  
        video[0].play();  
    };  
      
    //stop button clicked  
    $(&#39;.btnStop&#39;).on(&#39;click&#39;, function() {  
        $(&#39;.btnPlay&#39;).removeClass(&#39;paused&#39;);  
        updatebar($(&#39;.progress&#39;).offset().left);  
        video[0].pause();  
    });  
      
    //fullscreen button clicked  
    $(&#39;.btnFS&#39;).on(&#39;click&#39;, function() {  
        if($.isFunction(video[0].webkitEnterFullscreen)) {  
            video[0].webkitEnterFullscreen();  
        }     
        else if ($.isFunction(video[0].mozRequestFullScreen)) {  
            video[0].mozRequestFullScreen();  
        }  
        else {  
            alert(&#39;Your browsers doesn\&#39;t support fullscreen&#39;);  
        }  
    });  
      
    //light bulb button clicked  
    $(&#39;.btnLight&#39;).click(function() {  
        $(this).toggleClass(&#39;lighton&#39;);  
          
        //if lightoff, create an overlay  
        if(!$(this).hasClass(&#39;lighton&#39;)) {  
            $(&#39;body&#39;).append(&#39;<p class="overlay"></p>&#39;);  
            $(&#39;.overlay&#39;).css({  
                &#39;position&#39;:&#39;absolute&#39;,  
                &#39;width&#39;:100+&#39;%&#39;,  
                &#39;height&#39;:$(document).height(),  
                &#39;background&#39;:&#39;#000&#39;,  
                &#39;opacity&#39;:0.9,  
                &#39;top&#39;:0,  
                &#39;left&#39;:0,  
                &#39;z-index&#39;:999  
            });  
            $(&#39;.videoContainer&#39;).css({  
                &#39;z-index&#39;:1000  
            });  
        }  
        //if lighton, remove overlay  
        else {  
            $(&#39;.overlay&#39;).remove();  
        }  
    });  
      
    //sound button clicked  
    $(&#39;.sound&#39;).click(function() {  
        video[0].muted = !video[0].muted;  
        $(this).toggleClass(&#39;muted&#39;);  
        if(video[0].muted) {  
            $(&#39;.volumeBar&#39;).css(&#39;width&#39;,0);  
        }  
        else{  
            $(&#39;.volumeBar&#39;).css(&#39;width&#39;, video[0].volume*100+&#39;%&#39;);  
        }  
    });  
      
    //VIDEO EVENTS  
    //video canplay event  
    video.on(&#39;canplay&#39;, function() {  
        $(&#39;.loading&#39;).fadeOut(100);  
    });  
      
    //video canplaythrough event  
    //solve Chrome cache issue  
    var completeloaded = false;  
    video.on(&#39;canplaythrough&#39;, function() {  
        completeloaded = true;  
    });  
      
    //video ended event  
    video.on(&#39;ended&#39;, function() {  
        $(&#39;.btnPlay&#39;).removeClass(&#39;paused&#39;);  
        video[0].pause();  
    });  
  
    //video seeking event  
    video.on(&#39;seeking&#39;, function() {  
        //if video fully loaded, ignore loading screen  
        if(!completeloaded) {   
            $(&#39;.loading&#39;).fadeIn(200);  
        }     
    });  
      
    //video seeked event  
    video.on(&#39;seeked&#39;, function() { });  
      
    //video waiting for more data event  
    video.on(&#39;waiting&#39;, function() {  
        $(&#39;.loading&#39;).fadeIn(200);  
    });  
      
    //VIDEO PROGRESS BAR  
    //when video timebar clicked  
    var timeDrag = false;   /* check for drag event */  
    $(&#39;.progress&#39;).on(&#39;mousedown&#39;, function(e) {  
        timeDrag = true;  
        updatebar(e.pageX);  
    });  
    $(document).on(&#39;mouseup&#39;, function(e) {  
        if(timeDrag) {  
            timeDrag = false;  
            updatebar(e.pageX);  
        }  
    });  
    $(document).on(&#39;mousemove&#39;, function(e) {  
        if(timeDrag) {  
            updatebar(e.pageX);  
        }  
    });  
    var updatebar = function(x) {  
        var progress = $(&#39;.progress&#39;);  
          
        //calculate drag position  
        //and update video currenttime  
        //as well as progress bar  
        var maxduration = video[0].duration;  
        var position = x - progress.offset().left;  
        var percentage = 100 * position / progress.width();  
        if(percentage > 100) {  
            percentage = 100;  
        }  
        if(percentage < 0) {  
            percentage = 0;  
        }  
        $(&#39;.timeBar&#39;).css(&#39;width&#39;,percentage+&#39;%&#39;);    
        video[0].currentTime = maxduration * percentage / 100;  
    };  
  
    //VOLUME BAR  
    //volume bar event  
    var volumeDrag = false;  
    $(&#39;.volume&#39;).on(&#39;mousedown&#39;, function(e) {  
        volumeDrag = true;  
        video[0].muted = false;  
        $(&#39;.sound&#39;).removeClass(&#39;muted&#39;);  
        updateVolume(e.pageX);  
    });  
    $(document).on(&#39;mouseup&#39;, function(e) {  
        if(volumeDrag) {  
            volumeDrag = false;  
            updateVolume(e.pageX);  
        }  
    });  
    $(document).on(&#39;mousemove&#39;, function(e) {  
        if(volumeDrag) {  
            updateVolume(e.pageX);  
        }  
    });  
    var updateVolume = function(x, vol) {  
        var volume = $(&#39;.volume&#39;);  
        var percentage;  
        //if only volume have specificed  
        //then direct update volume  
        if(vol) {  
            percentage = vol * 100;  
        }  
        else {  
            var position = x - volume.offset().left;  
            percentage = 100 * position / volume.width();  
        }  
          
        if(percentage > 100) {  
            percentage = 100;  
        }  
        if(percentage < 0) {  
            percentage = 0;  
        }  
          
        //update volume bar and video volume  
        $(&#39;.volumeBar&#39;).css(&#39;width&#39;,percentage+&#39;%&#39;);      
        video[0].volume = percentage / 100;  
          
        //change sound icon based on volume  
        if(video[0].volume == 0){  
            $(&#39;.sound&#39;).removeClass(&#39;sound2&#39;).addClass(&#39;muted&#39;);  
        }  
        else if(video[0].volume > 0.5){  
            $(&#39;.sound&#39;).removeClass(&#39;muted&#39;).addClass(&#39;sound2&#39;);  
        }  
        else{  
            $(&#39;.sound&#39;).removeClass(&#39;muted&#39;).removeClass(&#39;sound2&#39;);  
        }  
          
    };  
  
    //Time format converter - 00:00  
    var timeFormat = function(seconds){  
        var m = Math.floor(seconds/60)<10 ? "0"+Math.floor(seconds/60) : Math.floor(seconds/60);  
    var s = Math.floor(seconds-(m*60))<10 ? "0"+Math.floor(seconds-(m*60)) :Math.floor(seconds-(m*60));  
        return m+":"+s;  
    };  
});
로그인 후 복사

Xiaoqiang의 HTML5 모바일 개발길입니다(5) - 아름다운 비디오 플레이어를 만드는 콘텐츠 더 많은 관련 콘텐츠는 PHP 중국어 웹사이트(m.sbmmt.com)를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿