您现在的位置:首页 >> 前端 >> 内容

移动端语音播放以及语音条拖动的实现代码教程

时间:2017/10/14 10:08:00 点击:

  核心提示:移动端语音播放,包含了语音播放动态小喇叭,语音条,时间长度,支持移动端触动拖动,不支持PC拖动。类似于微信公众号里面的语音播放,效果如下:进入页面: 播放时: 页面代码:!DOCTYPE htmlht...

移动端语音播放,包含了语音播放动态小喇叭,语音条,时间长度,支持移动端触动拖动,不支持PC拖动。

类似于微信公众号里面的语音播放,效果如下:

进入页面:

移动端语音播放以及语音条拖动的实现代码教程

播放时:

移动端语音播放以及语音条拖动的实现代码教程

页面代码:

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="UTF-8" />  
    <title>阅读详情</title>  
    <link rel="stylesheet" type="text/css" href="css/read-detail.css">  
    <link rel="stylesheet" type="text/css" href="css/reset.css">  
    <link rel="stylesheet" type="text/css" href="css/audio.css">  
</head>  
<body>  
    <p class="nav">  
        <a href="" class="return"></a>  
        <a href="" class="close">关闭</a>  
        <p>《靠谱》</p>  
    </p>  
    <p class="voice">  
        <p class="gif">  
            <img id="images" src="images/static.png" alt="" onclick="">  
            <audio id='audio' src="music.mp3" hidden="true"></audio>  
        </p>  
        <p class="right">  
            <p>听读:第五幕</p>  
            <p id="touchline" class="speed">  
                <p class="timeline">  
                    <p class="circle">  
                    </p>  
                </p>  
            </p>  
            <p class="num">  
                    <span class="currentTime">00:00</span>  
                    <span class="timeAll">00:00</span>  
            </p>  
        </p>  
    </p>  
    <p class="content">  
        <p>但是因为滤镜的兼容性问题,最好是不要用,你可以用ps做图的时候,把背景调一下透明度后导成png格式的图片就行了</p>  
        <p>如果透明的背景颜色一样的话,那么你可以切成1px*1px大小的png图片平铺,gif只支持透明度100%也就是完全透明的图片</p>  
        <p>半透明的不支持,而png格式的图片则不存在什么问题</p>  
        <p>唯一会有问题的地方就只是IE6不兼容透明png格式而已,我的百度空间有解决IE6透明的问题</p>  
    </p>  
    <p class="bottom">  
        <p class="left">  
            <a href="#">  
                <span></span>  
                上一章  
            </a>  
        </p>  
        <p class="center">  
            <a href="#">  
               <i></i>  
                目录  
            </a>  
        </p>  
        <p class="right">  
            <a href="#">  
                下一章  
                <b></b>  
            </a>  
        </p>  
  
  
    </p>  
</body>  
<script type="text/javascript" src="js/jquery.1.9.1.min.js"></script>  
<script>  
$(document).ready(function(){  
  
    <!-- var ProcessNow = 0; -->  
    var audio = document.getElementById("audio");  
    $("#images").on('click',function(){  
        if(audio.paused){  
            Play();  
        }else{  
            Pause();  
        }  
    })  
    var isTouch = false;  
  
    var lineStart = $("#touchline").offset().left;  
    var lineWidth = $("#touchline").width();  
  
    //监听音频播放完毕事件  
    audio.addEventListener('ended', function () {  
        document.getElementById("images").src="images/static.png";  
        $(".circle").css("width", 0);  
        $(".currentTime").html('00:00');  
    }, false);  
  
    function Play() {  
        audio.play();  
        document.getElementById("images").src="images/voice.gif";  
        TimeSpan();  
    } //Play()  
  
    function Pause() {  
        audio.pause();  
        document.getElementById("images").src="images/static.png";  
    } //Pause()  
  
    function TimeSpan() {  
  
        setInterval(function () {  
            <!-- if(!isTouch){ -->  
                <!-- currentTime = audio.currentTime; -->  
                <!-- timeAll = audio.duration; -->  
                <!-- isTouch = false; -->  
            <!-- } -->  
            var currentTime = audio.currentTime;  
            var timeAll = audio.duration;  
            <!-- currentTime = audio.currentTime; -->  
            <!-- timeAll = audio.duration; -->  
            var ProcessNow = (currentTime / timeAll) * 400;  
            $(".circle").css("width", ProcessNow);  
            var currentTimeFm = timeFormat(audio.currentTime);  
            var timeAllFm = timeFormat(TimeAll());  
            //触发条件停止循环,然后将时间和进度条初始化  
            if(currentTime >= timeAll){  
                $(".circle").css("width", 0);  
                $(".currentTime").html('00:00');  
                clearInterval(interval);  
            }  
            $(".currentTime").html(currentTimeFm);  
            $(".timeAll").html(timeAllFm);  
            }, 1000);  
    }  //TimeSpan()  
  
    function timeFormat(number) {  
        var minute = parseInt(number / 60);  
        var second = parseInt(number % 60);  
        minute = minute >= 10 ? minute : "0" + minute;  
        second = second >= 10 ? second : "0" + second;  
        return minute + ":" + second;  
    } //timeFormat()  
  
    function TimeAll() {  
        return audio.duration;  
    } //TimeAll()  
    //手势监听事件touchline  
    var touchline = document.getElementById("touchline");  
    touchline.addEventListener('touchstart', function(evt) {  
        if(audio.pause||audio.ended){  
            Play();  
        }  
        var touch=evt.touches[0];  
        x=parseInt(touch.pageX);  
        <!-- alert(x); -->  
        <!-- alert(lineStart); -->  
        if(x<lineStart){  
            x = lineStart;  
        }  
        var scale = (x - lineStart)/lineWidth;  
        audio.currentTime = scale * audio.duration;  
    }, false);  
  
    <!-- touchline.addEventListener("touchmove",function(evt){ -->  
       <!-- evt.preventDefault(); -->  
       <!-- var touch=evt.touches[0]; -->  
       <!-- end_x=parseInt(touch.pageX), -->  
       <!-- end_y=parseInt(touch.pageY); -->  
       <!-- xy.innerHTML=end_x+","+end_y; -->  
    <!-- },false) -->  
    <!-- touchline.addEventListener("touchend",function(evt){ -->  
       <!-- var x_x=end_x-x; -->  
       <!-- var y_y=end_y-y; -->  
       <!-- endxy.innerHTML=x_x+","+y_y; -->  
       <!-- document.title="x轴移动了"+x_x+" ,y轴移动了"+y_y; -->  
       <!-- if(y_y<-50){ -->  
          <!-- content.innerHTML="由于你向上滑动了一段距离,所以我要插入内容了"; -->  
       <!-- }else{ -->  
          <!-- content.innerHTML=""; -->  
       <!-- } -->  
    <!-- },false) -->  
  
  
})  
</script>  
</html>  

这个语音播放有点缺陷,进入页面时,语音并没有被加载,需要点击播放后才加载,不过也比较符合用户,节省流量。还有就是因为语音条比较小,触动事件的那个p比较小,触动滑动时,不会很灵敏。

作者:网络 来源:qq_2056530