> 웹 프론트엔드 > JS 튜토리얼 > vue-element 컴포넌트를 기반으로 음악 플레이어 기능 구현

vue-element 컴포넌트를 기반으로 음악 플레이어 기능 구현

不言
풀어 주다: 2018-05-07 14:53:56
원래의
2179명이 탐색했습니다.

이 글은 주로 vue-element 컴포넌트를 기반으로 한 뮤직 플레이어 기능의 구현을 소개합니다. 코드는 간단하고 이해하기 쉽고, 매우 좋으며, 필요한 친구들이 참고할 수 있습니다.

최근에 저는 github-page와 gist 블로그를 기반으로 코드를 작성하고 있는데 뮤직 플레이어를 추가하고 싶어서 오전 내내 작업해서 여기서 공유하겠습니다

데모 주소 https://github-laziji.github.io

Effect

사용된 구성요소

element Component

  • Layout

  • Button Button

  • Slider

  • 진행률 표시줄 Progress

  • 팝오버

html5 컴포넌트

audio

구현 코드

더 자세한 구현을 보려면 https://github.com/GitHub-Laziji/vblog

<template>
  <p>
  <el-row>
   <el-col :span="4">
    <el-popover
    placement="top-start"
    trigger="hover">
     <p style="text-align: center">
      <el-progress 
      color="#67C23A"
      type="circle" 
      :percentage="music.volume"></el-progress><br>
      <el-button 
      @click="changeVolume(-10)"
      icon="el-icon-minus" 
      circle></el-button>
      <el-button 
      @click="changeVolume(10)"
      icon="el-icon-plus" 
      circle></el-button>
     </p>
     <el-button 
     @click="play"
     id="play"
     slot="reference"
     :icon="music.isPlay?&#39;el-icon-refresh&#39;:&#39;el-icon-caret-right&#39;" 
     circle></el-button>
    </el-popover>
   </el-col>
   <el-col :span="14" style="padding-left: 20px">
    <el-slider
    @change="changeTime"
    :format-tooltip="formatTime"
    :max="music.maxTime"
    v-model="music.currentTime" 
    style="width: 100%;"></el-slider>
   </el-col>
   <el-col :span="6" style="padding: 9px 0px 0px 10px;color:#909399;font-size: 13px">
    {{formatTime(music.currentTime)}}/{{formatTime(music.maxTime)}}
   </el-col>
  </el-row>
  <audio ref="music" loop autoplay> 
   <source src="http://sc1.111ttt.cn:8282/2018/1/03m/13/396131232171.m4a?tflag=1519095601&pin=6cd414115fdb9a950d827487b16b5f97#.mp3" type="audio/mpeg">
  </audio>
 </p>
</template>
<script>
 export default{
  data(){
   return {
    music:{
     isPlay:false,
     currentTime:0,
     maxTime:0,
     volume:100
    }
   }
  },
  mounted(){
   this.$nextTick(()=>{
    setInterval(this.listenMusic,1000)
   })
  },
  methods:{
   listenMusic(){
    if(!this.$refs.music){
     return
    }
    if(this.$refs.music.readyState){
     this.music.maxTime = this.$refs.music.duration
    }
    this.music.isPlay=!this.$refs.music.paused
    this.music.currentTime = this.$refs.music.currentTime
   },
   play(){
    if(this.$refs.music.paused){
     this.$refs.music.play()
    }else{
     this.$refs.music.pause()
    }
    this.music.isPlay=!this.$refs.music.paused
    this.$nextTick(()=>{
     document.getElementById(&#39;play&#39;).blur()
    })
   },
   changeTime(time){
    this.$refs.music.currentTime = time
   },
   changeVolume(v){
    this.music.volume += v 
    if(this.music.volume>100){
     this.music.volume = 100
    }
    if(this.music.volume<0){
     this.music.volume = 0
    }
    this.$refs.music.volume = this.music.volume/100
   },
   formatTime(time){
    let it = parseInt(time)
    let m = parseInt(it/60)
    let s = parseInt(it%60)
    return (m<10?"0":"")+parseInt(it/60)+":"+(s<10?"0":"")+parseInt(it%60)
   }
  } 
 }
</script>
로그인 후 복사

를 참조하세요. 관련 권장 사항:

vue.js 및 webpack을 기반으로 한 채팅 예시

vue.js 기반의 픽처휠 구현 방송 효과


위 내용은 vue-element 컴포넌트를 기반으로 음악 플레이어 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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