核心提示:移动端语音播放,包含了语音播放动态小喇叭,语音条,时间长度,支持移动端触动拖动,不支持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比较小,触动滑动时,不会很灵敏。


