1. 程式人生 > 其它 >實現網易雲專案輪播圖滾動切換效果

實現網易雲專案輪播圖滾動切換效果

搭建主頁面

(1)清空views資料夾內的VUE專案,並且新建HomeView.vue檔案。

(2)在components內新建四個vue檔案

分別是:swiperCom、topNav、musicList、iconList

(3)在public 下建立js ,js內建立rem.js 將rem.js 檔案內容貼上進來

(4)topNav 對應發現頁的頂部導航欄 分成左中右三個部分 使用vue子內部css

(5) 引入阿里巴巴向量圖示 (阿里巴巴向量圖示網站 https://www.iconfont.cn/ 在 public內的index.html title後引入阿里巴巴向量圖示

 <script src="//at.alicdn.com/t/font_2116323_2uzmlhod9n5.js"></script>

 

<link rel="stylesheet" href="//at.alicdn.com/t/font_2116323_wrykyjzwea.css">

 

topNav.vue內

<div class="topLeft">
          <svg class="icon" aria-hidden="true">
              <!--阿里巴巴向量圖示-->
               <use xlink:href="#icon-liebiao"</use>
              <!--阿里巴巴向量圖示 只改 liebiao就可以-->
           </svg>
</div>

(6)解決右側放大鏡溢位螢幕的問題

app.vue

<style lang="less">
*{
 margin: 0;
 padding: 0;
 box-sizing: border-box;
 font-family:'微軟雅黑';
}
</style>

 

(7)在 public 內的index.html里加script,

效果: 放大或縮小,裡面的內容會隨之改變

    <script src="<%= BASE_URL %>js/rem.js"></script>//

 

(8) 輪播圖部分 套用 swiper外掛

右鍵music開啟終端

npm i swiper vue-awesome-swiper  --save
npm i swiper@5 --save

引入swiper框架 swiperCom.vue:

<script>
import 'swiper/css/swiper.css'  //引入css
import Swiper from 'swiper';  // 引入框架
export default {
   name: "swiperCom",
   data(){
       return{
           imgs:[
              {pic:require('../assets/img/swiper1.jpg')},
              {pic:require('../assets/img/swiper2.jpg')},
              {pic:require('../assets/img/swiper3.png')}
          ]
      }
  }
}
</script>

輪播圖的for迴圈 swiperCom.vue:

<template>
   <div class="swipercom">
       <div class="swiper-container" id="swiperIndex">
           <div class="swiper-wrapper">
               <div class="swiper-slide" v-for="(item,i) in imgs" :key="i">
                   <img :src="item.pic" alt="">
               </div>
           </div>
       </div>
   </div>
</template>

 

引入輪播圖介面

1.在src內建立api資料夾 api內建立index.js,在assets內把img放進來

在api/index.js中

import axios from 'axios'//引入阿賈克斯
let baseUrl = 'http://localhost:3000/';  // 基準url

建立 new swiper例項物件 ,與DOM進行連結

 mounted(){
           var mySwiper=new Swiper('#swiperIndex',{
               //配置分頁器內容
               pagination:{
                   el:".swiper-pagination", //分頁器與哪個標籤相關聯
                   clickable:true //分頁器是否可以點選
              }
          })
      }

 

獲取輪播圖的api, /banner?type=2 封裝這個介面使得管理便方便

export function getBanner(type=0){  
   //   type=0設定預設值 代表 pc端 0: pc  
   //3: ipad  
   //2: iphone
   //1: android
       return axios.get(`${baseUrl}/banner?type=${type}`)   // 注意 這個`${baseUrl}/banner?type=${type}` 用的時飄號即模板字串解析變數 不是單引號! 注意
}

 

引入介面的高階方式

Ⅰ、musicList.vue:

<template>
   <div>
<div class="swiper-slide" v-for="(item,i) in musics.musicList" :key="i">
   </div>
</template>
<script>
import {getMusic} from '@/api/index.js'
import {reactive,onMounted}from 'vue';
export default {
   name: "musicList",
   setup(){
       let musics= reactive({
           musicList:[]
      });
       //傳送ajiak請求資料
       onMounted( async function () {  // view與model繫結之後的生命週期函式
           let res = await getMusic();
           musics.musicList = res.data.result;
      })
       return{musics}
  }
}
</script>

api/index.js 介面檔案


export function getMusic(){  
   //type=0設定預設值 代表 pc端  
   //0: pc 3: ipad  
   //2: iphone   ,
   //1: android
       return axios.get(`${baseUrl}/personalized?limit=6`)   // 注意 這個`${baseUrl}/banner?type=${type}`
   //用的時飄號即模板字串解析變數  
}

eg:


//獲取輪播圖api /banner?type=2 type:資源型別,對應以下型別:
//0:pc
//1:android
//2:iphone
// 3:i pad
export function getBanner(type=0) {
   // ``飄號可以解析變數baseUrl
   //模板字串
   return axios.get(`${baseUrl}/banner?type=${type}`)

}


//發現歌單的api, /personalized?limit=10 limit: 獲取歌單的數量
export function getMusic(limit=10) {
   return axios.get(`${baseUrl}/personalized?limit=${limit}`)
}

 

(9)滑塊功能的迴圈實現

Ⅰ、musicList.vue 迴圈出圖片和文字

<template>
   <div class="musicList">
        <div class="musicList-top">
            <div class="title">發現好歌單</div>
            <div class="more">檢視更多</div>
        </div>

<!--滑塊功能的實現-->
        <div class="mlist">
            <div class="swiper-container" id="musicSwiper">
                <div class="swiper-wrapper">
                    <div class="swiper-slide" v-for="(item,i) in musics.musicList" :key="i">
                        <img :src="item.picUrl" alt="">
                    </div>
                </div>
            </div>
        </div>
   </div>
</template>

<script>
   import 'swiper/css/swiper.css'//引入
   import Swiper from 'swiper'//引入
   import {getMusic} from '@/api/index.js'
   import {reactive,onMounted,onUpdated}from 'vue';
   export default {
       name: "musicList",
       setup(){//vue3的組合API
           let musics= reactive({
               musicList:[]//儲存獲取的歌單列表
          });
           //傳送ajiak請求資料
           onMounted( async function () {  // view與model繫結之後的生命週期函式
               let res = await getMusic();
               musics.musicList = res.data.result;
          });




           //在拿到musics拿到資料之後執行滑塊功能
           onUpdated(function () {
               //view 或者model發生改變後 出發的生命週期函式
               var swiper=new Swiper('#musicSwiper',{
                   //               跟#musicSwiper那個關聯
                   slidesPerView:3, // 每一屏顯示幾塊滑塊內容
                   spaceBetween:10,//滑塊之間間距
              })

          })
           return{musics}
      }
  }
</script>

<style lang="less" scoped>
   .musicList{
       width: 7.5rem;
       padding: 0 0.4rem;
       .musicList-top{
           display: flex;
           justify-content: space-between;
           height: 1rem;
           align-items: center;
           .title{