<template> 
  <transition> 
    <div class="player" v-show="getShow"> 
      <playerHearder :currentSong="getcurrentSong"></playerHearder> 
      <playerMiddle 
        :currentSong="getcurrentSong" 
        :currentTime="currentTime" 
      ></playerMiddle> 
      <playerBottom 
        :currentSong="getcurrentSong" 
        :totalt="totalTime" 
        :currentTime="currentTime" 
      ></playerBottom> 
      <div class="playerbg"> 
        <img :src="getcurrentSong.picUrl" alt="" /> 
      </div> 
      <audio 
        autoplay 
        :src="getcurrentSong.musicUrl" 
        ref="playaudio" 
        id="paudio" 
        @timeupdate="timeupdate" 
        @ended="endit" 
      ></audio> 
      <h1>{{ getcurrentSong.musicUrl }}</h1> 
    </div> 
  </transition> 
</template> 
 
<script> 
import { mapGetters, mapActions } from "vuex"; 
import playerHearder from "../components/player/playerHearder.vue"; 
import playerMiddle from "../components/player/playerMiddle.vue"; 
import playerBottom from "../components/player/playerBottom.vue"; 
 
export default { 
  name: "myPlayer", 
  components: { 
    playerHearder, 
    playerMiddle, 
    playerBottom, 
  }, 
  data() { 
    return { 
      totalTime: 0, 
      currentTime: 0, 
      currentLy: "", 
    }; 
  }, 
  created() {}, 
  mounted() { 
    console.log(this.getcurrentSong); 
    this.$refs.playaudio.oncanplay = () => { 
      this.totalTime = Math.ceil(this.$refs.playaudio.duration); 
    }; 
  }, 
  methods: { 
    ...mapActions(["setCurrentIndex", " setModeType", "setCurrentTime"]), 
    timeupdate() { 
      this.currentTime = this.$refs.playaudio.currentTime; 
    }, 
    endit() { 
      if (this.getModeType == 0) { 
        // this.$refs.playaudio.loop = false; 
        // 向前播放 
        if (this.getCurrentIndex < this.getSongs.length - 1) { 
          this.setCurrentIndex(this.getCurrentIndex + 1); 
        } else { 
          this.setCurrentIndex(0); 
        } 
      } else if (this.getModeType == 1) { 
        // 单曲循 
        this.$refs.playaudio.play(); 
        this.setCurrentIndex(this.getCurrentIndex); 
      } else if (this.getModeType == 2) { 
        // this.$refs.playaudio.loop = false; 
        this.setCurrentIndex(Math.floor(Math.random() * this.getSongs.length)); 
      } 
    }, 
  }, 
  computed: { 
    ...mapGetters([ 
      "getShow", 
      "getcurrentSong", 
      "getIsPlay", 
      "getCurrentIndex", 
      "getModeType", 
      "setSongsDeatil", 
      "getSongs", 
      "getCurrentTime", 
      "getCurrrentLyric", 
    ]), 
  }, 
  watch: { 
    getIsPlay(newV) { 
      if (newV) { 
        this.$refs.playaudio.play(); 
      } else { 
        this.$refs.playaudio.pause(); 
      } 
    }, 
    getCurrentTime(newV) { 
      // console.log(newV); 
      this.$refs.playaudio.currentTime = newV; 
    }, 
    getcurrentSong(newV) { 
      let historyList = JSON.parse(localStorage.getItem("historyList")) || []; 
      let flag = false; 
      console.log(newV); 
      if (newV.id != "") { 
        if (historyList.length == 0) { 
          historyList.push(newV); 
        } else { 
          historyList.forEach((v) => { 
            if (v.id == newV.id) { 
              flag = true; 
            } 
          }); 
          if (!flag) { 
            historyList.push(newV); 
          } 
        } 
      } 
 
      // console.log("zuizhong", history_list); 
      localStorage.setItem("historyList", JSON.stringify(historyList)); 
    }, 
  }, 
}; 
</script> 
 
<style scoped lang="scss"> 
.player { 
  position: fixed; 
  top: 0; 
  left: 0; 
  right: 0; 
  bottom: 0; 
  overflow: hidden; 
  z-index: 1000; 
  .playerbg { 
    width: 100%; 
    height: 100%; 
    position: relative; 
    z-index: -100; 
    img { 
      height: 130%; 
      position: absolute; 
      left: 50%; 
      top: 50%; 
      transform: translate(-50%, -50%); 
      filter: blur(100px); 
    } 
  } 
} 
 
.v-enter { 
  transform: translateX(100%); 
} 
.v-enter-to { 
  transform: translateX(0); 
} 
.v-enter-active { 
  transition: all 1s; 
} 
.v-leave { 
  transform: translateX(0); 
} 
.v-leave-to { 
  transform: translateX(100%); 
} 
.v-leave-active { 
  transition: all 1s; 
} 
</style> 
 
 
 |