美文网首页
音频时长,进度条,开关按钮

音频时长,进度条,开关按钮

作者: yyshang | 来源:发表于2019-04-24 15:56 被阅读0次

    html

      <audio id="article_audio" class='article_audio' controls src='image/2.mp3'>
            </audio>
            <div class="audio_box">
                <a id="play_btn" class="play_btn"></a>
                <div id="pgs" class="pgs">
                    <div id="progress" class="pgs-play"></div>
                    <div id="circle" class="circle"></div>
                </div>
                <div class="time_p clearfix">
                    <span id="playedTime" class="playedTime" style="display: none">00:00</span>
                    <span id="totalTime" class="totalTime">00:00</span>
                </div>
            </div>
    

    js

      var audio = $('#article_audio').get(0);
        var totalWidth = $("#pgs").width();  //进度条长度
        function startAudio(){
            audio.play();
            $("#play_btn").addClass("on");
        }
    
        function endAudio(){
            audio.pause();
            $("#play_btn").removeClass("on");
        }
    
        /**
         * 获取音频总时长,并转化为 00:00格式
         */
        $('#article_audio').on("loadedmetadata",function () {
            $('#totalTime').text(transTime(this.duration));
        });
    
    
        /**
         * 开始/暂停按钮点击事件
         */
        $("#play_btn").click(function(e){
            if(audio.paused){
                startAudio();
            }else{
                endAudio();
            }
        });
    
        /**
         * 播放进度
         */
        audio.addEventListener('timeupdate',updateProgress,false);
        //更新进度条
        function updateProgress() {
            var value = Math.round((Math.floor(audio.currentTime) / Math.floor(audio.duration)) * 100, 0);
            $('.pgs-play').css('width', value + '%');
            $("#circle").css({"left":(audio.currentTime/audio.duration)*totalWidth-1+"px"});
            $("#playedTime").html(transTime(audio.currentTime));
        }
    
        $("#pgs").click(function(e){
            var startX = $(this).offset().left;  //进度条开始的x坐标
            var endX = e.clientX;  //点击事件的x坐标
            rate = (endX - startX) / totalWidth;
            $("#circle").css({"left":(endX-startX-1)+"px"});
            audio.currentTime = rate*audio.duration;
            updateProgress();
        });
    
        /**
         * 播放结束
         */
        audio.addEventListener('ended',endAudio,false);
    
        $("#circle").on("touchstart",function(e){
            endAudio();
        });
        $("#circle").on("touchmove",function(e){
            e.preventDefault();
            var startX = $("#pgs").offset().left;  //进度条开始的x坐标
            var endX = e.originalEvent.touches[0].clientX;  //点击事件的x坐标
            if((endX+1) > startX && endX < (startX+totalWidth)){  //触摸范围大于进度条起点,小于进度条终点
                $("#circle").css({"left":(endX-startX-1)+"px"});
                rate = (endX - startX) / totalWidth;
                audio.currentTime = rate*audio.duration;
                updateProgress();
            }
        });
        $("#circle").on("touchstart",function(e){
            startAudio();
        });
    
    
        //转换音频时长显示
        function transTime(time) {
            var duration = parseInt(time);
            var minute = parseInt(duration/60);
            var sec = duration%60+'';
            var isM0 = ':';
            if(minute == 0){
                minute = '00';
            }else if(minute < 10 ){
                minute = '0'+minute;
            }
            if(sec.length == 1){
                sec = '0'+sec;
            }
            return minute+isM0+sec
        }
    
    

    相关文章

      网友评论

          本文标题:音频时长,进度条,开关按钮

          本文链接:https://www.haomeiwen.com/subject/amvggqtx.html