国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

讓工作與音樂(lè)(Vue)相伴

jemygraw / 3235人閱讀

摘要:前言最近在自學(xué)打算自己仿一個(gè)項(xiàng)目來(lái)實(shí)戰(zhàn)一下,由于本人很喜歡聽(tīng)歌,所以就選擇了網(wǎng)易云音樂(lè),在這與大家分享一下自己所遇到的問(wèn)題,其中也有些不足之處也希望大家提一些寶貴的意見(jiàn),互相學(xué)習(xí),一起進(jìn)步。

前言

最近在自學(xué)vue,打算自己仿一個(gè)項(xiàng)目來(lái)實(shí)戰(zhàn)一下,由于本人很喜歡聽(tīng)歌,所以就選擇了網(wǎng)易云音樂(lè),在這與大家分享一下自己所遇到的問(wèn)題,其中也有些不足之處也希望大家提一些寶貴的意見(jiàn),互相學(xué)習(xí),一起進(jìn)步。

關(guān)于項(xiàng)目使用的技術(shù)棧

Vue:采用Vue的語(yǔ)法

Vuex:實(shí)現(xiàn)不同組件之間的狀態(tài)共享

vue-router:?jiǎn)雾?yè)應(yīng)用路由管理必備

axios:發(fā)起http請(qǐng)求

SASS(SCSS):css預(yù)處理語(yǔ)言

項(xiàng)目

由于時(shí)間有限,只是做了個(gè)頁(yè)面的播放功能,其中用到了網(wǎng)易云音樂(lè)的API網(wǎng)易云,有興趣的可以去玩玩,其中也涉及到了一些知識(shí)點(diǎn),在這與大家分享一下。

上圖

整個(gè)效果:
)

分享做這個(gè)單頁(yè)面的過(guò)程

這就是一個(gè)header組件,一個(gè)footer組件,一個(gè)musicList組件和一個(gè)paly組件組成的單頁(yè)面。

1. 如何獲取音樂(lè)的數(shù)據(jù)

我這是從網(wǎng)易云音樂(lè)api扒出來(lái)的,扒出來(lái)之后新建一個(gè)文件,把數(shù)據(jù)放進(jìn)去,之后通過(guò)axios獲取,部分代碼如下:

actions: {
    getData({ commit,state }) {
      if (localStorage.musics !== "[]" && localStorage.musics) {
        state.musicData = JSON.parse(localStorage.musics);
        return;
      }
      return new Promise((resolve, reject) => {
        Vue.axios.get("music-data")
            .then (res => {
              if (res.data.error === 0) {
                state.musicData = res.data.musicData;
                localStorage.musics = JSON.stringify(state.musicData);
              }
            })
            .then(() => {
              commit("toggleMusic",0)
            });
        resolve();
      });
    }
  }
2. 刪除功能

我是在這刪除這個(gè)圖標(biāo)下綁定了一個(gè)事件,主要就二句代碼:


在methods定義del事件就好了
        del(index){
            this.$store.commit("del",index);
        }
3. 尾部的播放控制

尾部的播放功能我一開(kāi)始遇到了一個(gè)難題就是如何獲取歌曲的時(shí)間和控制播放的進(jìn)度。后來(lái)通過(guò)查找資料和百度解決了

獲取歌曲時(shí)間的部分代碼如下:

 {{transformTime(now)}}
 js部分代碼
  this.nativeAudio = document.querySelector("audio");
    this.nativeAudio.addEventListener("play", () => {
      this.totalTime = this.transformTime(this.nativeAudio.duration);
      this.now = this.nativeAudio.currentTime;
      setInterval(() => {
        this.now = this.nativeAudio.currentTime;
      }, 1000)
    })
    
    transformTime(seconds) {
      let m, s;
      m = Math.floor(seconds / 60);
      m = m.toString().length == 1 ? ("0" + m) : m;
      s = Math.floor(seconds - 60 * m);
      s = s.toString().length == 1 ? ("0" + s) : s;
      return m + ":" + s;
    }

控制播放進(jìn)度的部分代碼如下

changeTime(event) {
      let progressBar = this.$refs.progressBar;
      let coordStart = progressBar.getBoundingClientRect().left;  //getBoundingClientRect()方法返回元素的大小及其相對(duì)于視口的位置
      let coordEnd = event.pageX;
      this.nativeAudio.currentTime = (coordEnd - coordStart) / progressBar.offsetWidth * this.nativeAudio.duration;
      this.now = this.nativeAudio.currentTime;
      this.nativeAudio.play();
      this.$store.commit("play", true);
    },
touchMove(event) {
      let progressBar = this.$refs.progressBar;
      let coordStart = progressBar.getBoundingClientRect().left;
      let coordEnd = event.touches[0].pageX;
      this.$refs.now.style.width = ((coordEnd - coordStart) / progressBar.offsetWidth).toFixed(3) * 100 + "%";  //toFixed(3)保留小數(shù)點(diǎn)后3位
    },
touchEnd(event) {
      this.nativeAudio.currentTime = this.$refs.now.style.width.replace("%", "")/100 * this.nativeAudio.duration;
      this.now = this.nativeAudio.currentTime;
      this.nativeAudio.play();
      this.$store.commit("play", true);
    },
4. 換膚

換膚主要提供了四種顏色,紅色 藍(lán)色 黑色 和綠色,樣式使用的是flex布局,主要css代碼如下:

.skin {
        position: absolute;
        display: flex;
        flex-direction: column;
        bottom: 50px;
        right: 15px;
        width: 30px;
        .skin-colors {
          flex: 4;
          width: 100%;
          display: flex;
          justify-content: center;
          align-items: center;
          flex-direction: column;
          .selected {
            border: 1px solid white;
          }
          i {
            flex: 1;
            display: inline-block;
            width: 20px;
            height: 20px;
            cursor: pointer;
            border-radius: 10px;
            margin-bottom: 5px;
          }
          i.one {
            background-color: #B72712;
          }
          i.two {
            background-color: #1565C0;
          }
          i.three {
            background-color: #212121;
          }
          i.four {
            background-color: #1B5E20;
          }
        }
        .icon-skin {
          flex: 1;
          width: 100%;
          height: 30px;
          background-repeat: no-repeat;
          background-size: contain;
          margin-top: 3px;
          cursor: pointer;
        }
        .icon-skin-red {
          background-image: url("./skinRed.svg");
        }
        .icon-skin-green {
          background-image: url("./skinGreen.svg");
        }
        .icon-skin-blue {
          background-image: url("./skinBlue.svg");
        }
        .icon-skin-black {
          background-image: url("./skinBlack.svg");
        }
5. 控制歌曲的上一首下一首的播放

部分代碼如下:

    prev() {
      this.audio.index = this.audio.index === 0 ? this.musicData.length - 1 : (--this.audio.index);
      this.$store.commit("toggleMusic", this.audio.index);
    }
    
    next() {
      this.audio.index = this.audio.index === this.musicData.length - 1 ? 0 : (++this.audio.index);
      this.$store.commit("toggleMusic", this.audio.index);
    }

總結(jié):通過(guò)模仿這個(gè)項(xiàng)目更加清楚地了解各組件之前的使用和不同組件的狀態(tài)共享。當(dāng)然也遇到了一些坑,文章寫(xiě)到這里,也沒(méi)有完全寫(xiě)完,只寫(xiě)了一個(gè)單頁(yè)面,但也算是一個(gè)小小的總結(jié),接下來(lái)附上我的源碼:項(xiàng)目源碼,有興趣的朋友可以看看順便幫忙點(diǎn)個(gè)star和fork,也希望能幫助到一些朋友。作為一名快要成為大四的學(xué)生,時(shí)間真的寶貴,對(duì)待學(xué)習(xí)也不敢懈怠,如果大家有什么好的想法的話(huà)可以聯(lián)系我的qq:137032979.碼字不容易,希望大家點(diǎn)個(gè)贊。前端路漫漫,與君共勉之。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96384.html

相關(guān)文章

  • 一起學(xué)設(shè)計(jì)模式 - 原型模式

    摘要:原型模式是創(chuàng)建模式的一種,其作用是提高創(chuàng)建效率,減少計(jì)算機(jī)資源開(kāi)銷(xiāo),與工廠模式類(lèi)似的是,都屏蔽了對(duì)象實(shí)例化的過(guò)程概述原型模式是模式的一種,其特點(diǎn)就是通過(guò)克隆拷貝的方式來(lái),節(jié)約創(chuàng)建成本和資源,被拷貝的對(duì)象模型就稱(chēng)之為原型。 原型模式(Prototype Pattern)是創(chuàng)建模式的一種,其作用是提高創(chuàng)建效率,減少計(jì)算機(jī)資源開(kāi)銷(xiāo),與工廠模式類(lèi)似的是,都屏蔽了對(duì)象實(shí)例化的過(guò)程... 概述 ...

    DevTalking 評(píng)論0 收藏0
  • Vue高仿qq音樂(lè)官網(wǎng)-pc端

    摘要:目前只用到和音樂(lè)的輪播圖不用說(shuō),音樂(lè)這個(gè)網(wǎng)站的頁(yè)面我是真的挺喜歡,不光是他的設(shè)計(jì),頁(yè)面的布局也很美觀,在控制臺(tái)調(diào)試的時(shí)候可以看看它的結(jié)構(gòu),非常有層次而富有美感,即使加上一層也不會(huì)有違和感。由于安全原因,跨域訪(fǎng)問(wèn)是被各大瀏覽器所默認(rèn)禁止的。 一直想做一個(gè)vue項(xiàng)目 然后呢 我就做了 效果預(yù)覽 部分地方不全部根據(jù)原版,也有自由發(fā)揮的,目前功能模塊比較簡(jiǎn)陋,如果加載太慢,可以下載下來(lái)再本地運(yùn)...

    andot 評(píng)論0 收藏0
  • 資源集 - 收藏集 - 掘金

    摘要:行爬取頂點(diǎn)全網(wǎng)任意小說(shuō)掘金之前連續(xù)多篇文章介紹客戶(hù)端爬取平臺(tái),今天我們從零開(kāi)始,實(shí)現(xiàn)爬取頂點(diǎn)小說(shuō)網(wǎng)任意一本小說(shuō)的功能。文件標(biāo)記所有文件我的后端書(shū)架后端掘金我的后端書(shū)架月前本書(shū)架主要針對(duì)后端開(kāi)發(fā)與架構(gòu)。 30行js爬取頂點(diǎn)全網(wǎng)任意小說(shuō) - 掘金之前連續(xù)多篇文章介紹客戶(hù)端爬取平臺(tái)(dspider),今天我們從零開(kāi)始,實(shí)現(xiàn)爬取頂點(diǎn)小說(shuō)網(wǎng)任意一本小說(shuō)的功能。 如果你還不知道客戶(hù)端爬取,可以先看...

    stdying 評(píng)論0 收藏0
  • 資源集 - 收藏集 - 掘金

    摘要:行爬取頂點(diǎn)全網(wǎng)任意小說(shuō)掘金之前連續(xù)多篇文章介紹客戶(hù)端爬取平臺(tái),今天我們從零開(kāi)始,實(shí)現(xiàn)爬取頂點(diǎn)小說(shuō)網(wǎng)任意一本小說(shuō)的功能。文件標(biāo)記所有文件我的后端書(shū)架后端掘金我的后端書(shū)架月前本書(shū)架主要針對(duì)后端開(kāi)發(fā)與架構(gòu)。 30行js爬取頂點(diǎn)全網(wǎng)任意小說(shuō) - 掘金之前連續(xù)多篇文章介紹客戶(hù)端爬取平臺(tái)(dspider),今天我們從零開(kāi)始,實(shí)現(xiàn)爬取頂點(diǎn)小說(shuō)網(wǎng)任意一本小說(shuō)的功能。 如果你還不知道客戶(hù)端爬取,可以先看...

    馬忠志 評(píng)論0 收藏0
  • 酷狗音樂(lè)- Vue / React 全家桶的兩種實(shí)現(xiàn)

    摘要:引言?xún)蓚€(gè)月前用全家桶實(shí)現(xiàn)過(guò)一次酷狗音樂(lè),最近又用全家桶重構(gòu)了下,最終成果和的實(shí)現(xiàn)基本一致,放個(gè)圖手機(jī)預(yù)覽戳版本版本。的行為結(jié)構(gòu)表現(xiàn)分離,很明顯,而的分離雖然不是很明顯,但實(shí)際上也是有的。發(fā)送指令,最終會(huì)到里合并數(shù)據(jù),與中的類(lèi)似。 引言 兩個(gè)月前用 Vue 全家桶實(shí)現(xiàn)過(guò)一次 酷狗音樂(lè),最近又用 React 全家桶重構(gòu)了下,最終成果和 Vue的實(shí)現(xiàn)基本一致,放個(gè)圖: showImg(htt...

    hot_pot_Leo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<