You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.6 KiB

<template>
<span class="e-audio">
<a :href="formatImageSrc(src)" download target="_blank">下载</a>
<span class="mkicon" @click="playAudio" :class="{'mkicon-play':!playState,'mkicon-pause':playState}"></span>
<span>{{currTime}}</span>
/
<span>{{endTime}}</span>
<audio :src="formatImageSrc(src)" @canplay="canplay" @timeupdate="updateTime" preload="auto" ref="audio" @play="play" @pause="pause" @ended="pause" @error="pause"></audio>
</span>
</template>
<style type="text/scss" lang="scss">
.e-audio{
.mkicon{
font-size: 16px;
color: #888888;
}
}
</style>
<script>
import './asset/icon/MKPlayer.scss'
import {formatImageSrc} from "@/utils/utils";
function formatTime(time) {
var hour, minute, second;
hour = (parseInt(time / 3600, 10));
if (hour <10) hour = '0' + hour;
minute = (parseInt((time % 3600) / 60, 10));
if (minute < 10) minute = '0' + minute;
second = (parseInt(time % 60, 10));
if (second < 10) second = '0' + second;
if (hour > 0) {
return hour + ":" + minute + ":" + second;
} else {
return minute + ":" + second;
}
}
export default {
name: "e-audio",
data() {
return {
playState:false,
currentTime:0,
duration:0,
}
},
props:{
src:String
},
watch: {},
computed: {
currTime(){
return formatTime(this.currentTime)
},
endTime(){
return formatTime(this.duration)
}
},
methods: {
formatImageSrc,
canplay(){
this.updateTime()
},
updateTime(){
this.duration = this.$refs.audio.duration
this.currentTime = this.$refs.audio.currentTime
},
playAudio(){
if(this.playState){
this.$refs.audio.pause();
this.playState = false;
}else{
this.$refs.audio.play();
this.playState = true;
}
},
play(){
this.playState = true;
},
pause(){
this.playState = false;
}
},
created() {
},
mounted() {
},
destroyed() {
}
}
</script>