国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue實現(xiàn)歌手列表字母排序下拉滾動條側(cè)欄排序?qū)崟r更新

2019-11-19 11:35:12
字體:
供稿:網(wǎng)友

今天寫項目的時候遇到了歌手排序的問題,聯(lián)想到了我們平時的手機(jī)通訊錄側(cè)欄字母排序,按照ABCDE這樣的順序?qū)γ诌M(jìn)行排序。

我們先來看看效果


那就用vue來實現(xiàn)一遍

首先新建一個vue頁面,取名為helloworld.vue

在頁面里寫入內(nèi)容

<template> <div class="hello"> <div class="singer" id="singer">  <div class="singer-top-tag">{{singerTopTag | filterSingerTag}}</div>  <ul class="singer-ul">  <li v-for="(item, index) in list" :key="index" class="singer-ul-li">   <div class="singer-tag" :id="item.tag">{{item.tag | filterSingerTag}}</div>   <ul>   <li v-for="(fitem, findex) in item.data" :key="findex">    <img :src="`https://y.gtimg.cn/music/photo_new/T001R300x300M000${fitem.Fsinger_mid}.jpg?max_age=2592000`">    <div>{{fitem.Fsinger_name}}</div>   </li>   </ul>  </li>  </ul> </div> <div class="sort">  <ul>  <li   v-for="(item, index) in sortList"   :key="index"   @click="jumpTag(item)"  :class="{current:currentSort == item ? true : false}"  >   {{item == `hot` ? `熱` : item}}  </li>  </ul> </div> </div></template>
<script>import axios from 'axios'export default { name: "HelloWorld", data() { return {  list:[], // 歌手列表  sortList:[], // 側(cè)欄排序列表  currentSort: 'hot', // 當(dāng)前排序的標(biāo)簽  singerTopTag: 'hot', // 歌手欄頭部的標(biāo)簽名字 }; }, mounted() { this.testData() // 監(jiān)聽滾動條 window.addEventListener('scroll', this.handleScroll) }, destroyed () { // 頁面摧毀的時候要關(guān)閉監(jiān)聽  window.removeEventListener('scroll', this.handleScroll) }, methods: { handleScroll () {  let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop  let offsetTop = 0  this.list.forEach((item,index) => {  // 獲取每個排序標(biāo)簽的位置  offsetTop = document.querySelectorAll('.singer-ul-li')[index].offsetTop  // 當(dāng)前滾動條的位置 和 當(dāng)前的標(biāo)簽偏移頂部的距離進(jìn)行對比  // 每一個歌手的li標(biāo)簽的高度必須要保持一致,我這里的高度是70,可以計算自己項目的內(nèi)容的具體高度進(jìn)行修改  if (scrollTop > offsetTop && scrollTop < (offsetTop+ 70*item.data.length)) {   this.singerTopTag = item.tag   this.currentSort = item.tag  }  }) }, // 請求數(shù)據(jù) testData(){  axios.get(`https://c.y.qq.com/v8/fcg-bin/v8.fcg?g_tk=1928093487&inCharset=utf-8&outCharset=utf-8¬ice=0&format=jsonp&channel=singer&page=list&key=all_all_all&pagesize=100&pagenum=1&hostUin=0&needNewCode=0&platform=yqq&jsonpCallback=jp1`)  .then(res => {  res = res.data.substring(5,res.data.length-1)  res = JSON.parse(res).data.list  res = res.sort((a,b) => a.Findex.localeCompare(b.Findex))  res.forEach((item,index) => {   // 添加側(cè)欄排序   item.Findex = item.Findex == 9 ? 'hot' : item.Findex   this.sortList.push(item.Findex)  })  // 去除重復(fù)  this.sortList = new Set(this.sortList)  this.sortList = [...this.sortList]  // 添加排序標(biāo)簽和歌手列表  this.sortList.forEach(e => {   this.list.push({   tag:e,   data:res.filter(i => i.Findex ==e)   })  })  }) }, // 跳轉(zhuǎn)標(biāo)簽 jumpTag(i){  this.singerTopTag = i  this.currentSort = i  document.querySelector(`#${i}`).scrollIntoView() } }, filters :{ filterSingerTag(i) {  return i == `hot` ? `熱門` : i } }};</script><!-- Add "scoped" attribute to limit CSS to this component only --><style scoped>.hello { position: relative; background-color: #222;}.singer { position: relative; width: 100%; height: 100%; overflow: hidden; background: #222;}.singer-top-tag { position: fixed; top: 0px; left: 0; width: 100%; height: 30px; line-height: 30px; padding-left: 20px; font-size: 12px; color: hsla(0,0%,100%,.5); background: #333;}.singer-tag { width: 100%; height: 30px; margin-bottom: 20px; line-height: 30px; padding-left: 20px; font-size: 12px; color: hsla(0,0%,100%,.5); background: #333;}.singer-ul-li ul li { list-style-type: none; display: flex; justify-content: flex-start; align-items: center; padding: 0 0 20px 20px; color: rgba(255, 255, 255, .5);}.singer-ul-li ul li img { border-radius: 50%; widows: 50px; height: 50px;}.singer-ul-li ul li div { padding-left: 20px;}.sort { position: fixed; z-index: 30; right: 0; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); width: 20px; padding: 20px 0; border-radius: 10px; text-align: center; background: rgba(0,0,0,.3); font-family: Helvetica;}ul { margin: 0; padding: 0;}.sort ul{ color: rgba(255,255,255,.6);}.sort ul li { list-style-type: none; padding: 3px; line-height: 1; font-size: 12px;}.current { color: #ffcd32;}</style>

我是使用的qq音樂接口,獲取的數(shù)據(jù)需要進(jìn)行處理,如果覺得麻煩可以自己寫靜態(tài)數(shù)據(jù)來代替

數(shù)據(jù)的格式

const list = [ {  tag:`A`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`奧巴里`  }  ] }, {  tag:`B`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`BIGBANG`  }  ] }, {  tag:`C`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`蔡依林`  }  ] }, {  tag:`D`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`鄧紫棋`  }  ] },]

再者還要注意頁面的img標(biāo)簽,直接復(fù)制上面的數(shù)據(jù)的話要對img標(biāo)簽進(jìn)行修改,去掉http那一串,直接用:src="item.img"代替

const list = [ {  tag:`A`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`奧巴里`  }  ] }, {  tag:`B`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`BIGBANG`  }  ] }, {  tag:`C`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`蔡依林`  }  ] }, {  tag:`D`,  data:[   {    img:`https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558361071&di=0a522afe68fc7e2aa3af34cb5cd8c96a&imgtype=jpg&er=1&src=http%3A%2F%2Fwerkstette.dk%2Fwp-content%2Fuploads%2F2015%2F09%2FEntertainment_Weekly_Photographer_Marc_Hom_British_Actor_Charlie_Hunnam_as_King_Arthur_Retouch_Werkstette10-770x841.jpg`,    Fsinger_name:`鄧紫棋`  }  ] },]

總結(jié)

以上所述是小編給大家介紹的vue實現(xiàn)歌手列表字母排序下拉滾動條側(cè)欄排序?qū)崟r更新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 加查县| 胶南市| 玉树县| 原阳县| 桦甸市| 大名县| 安陆市| 绥滨县| 涿州市| 延津县| 保山市| 房产| 临漳县| 青铜峡市| 徐水县| 罗城| 金沙县| 济南市| 绥滨县| 南岸区| 临江市| 阳泉市| 灵山县| 肃北| 嘉禾县| 白沙| 惠水县| 云南省| 桦甸市| 河津市| 涿鹿县| 临汾市| 波密县| 堆龙德庆县| 汽车| 临澧县| 东乌珠穆沁旗| 盘山县| 石柱| 德昌县| 万州区|