music功能 vue_vue_music:歌手详情页
在singer.vue中,点击某一歌手,根据路由跳转到singer-detail.vue
在vue-muscie:singer.vue页面的5.数据序列化后传入list-vue中相关逻辑
selectSinger(singer) {
//导航至singer-detail.vue页面
this.$router.push({
path: `/singer/${singer.id}`
})
//同时,将singer的信息放入vuex中
this.setSinger(singer)
},
由于singer-detail.vue页面具有共同性,因此封装成一个组件music-list.vue
1.singer-detail.vue
这个组件比较简单,一个壳子,获取数据传入组件
1.1获取数据
_getDetail() {
//如果在歌手详情页面刷新,无法获取singer.id,则直接返回歌手列表页面
if (!this.singer.id) {
this.$router.push('/singer')
}
getSingerDetail(this.singer.id).then((res) => {
if (res.code === ERR_OK) {
this.songs = this._normallizeSongs(res.data.list)
}
})
},
1.2 获取的数据序列化
_normallizeSongs(list) {
let ret = []
list.forEach((item) => {
let {musicData} = item
if (musicData.songid && musicData.albummid) {
ret.push(createSong(musicData))
}
})
return ret
}
这里使用createSong,创建一个song实例
2.music-list.vue
这个组件需求:
背景图 bgImage
标题title
歌手详情数据songs
2.1 页面
组件需要接收的数据props
props: {
bgImage: { //背景图片
type: String,
default: ''
},
songs: { //歌手详情数据songs
type: Array,
default: () => []
},
title: { //标题title
type: String,
default: ''
},
}
背景图片的利用:style 和 computed
computed: {
bgStyle() {
return `background-image:url(${this.bgImage})`
}
},
2.2 滚动列表
根据歌手查询到歌曲列表,需要滚动scroll.vue
@scroll="scroll" //需要派发滚动位置,触发的事件
:probe-type="probeType" //不需要截流
:listen-scroll="listenScroll" //派发滚动位置
:data="songs" //接收数据,初始化scroll
class="list"
ref="list">
2.3 滚动需求
为了能让他向上滚动,初始化的时候列表设置top值
mounted() {
//背景图图片的高度
this.imageHeight = this.$refs.bgImage.clientHeight
//滚动的边界:滚动到此 背景图片 ——(减去) 顶部title的高度
this.minTranslateY = -this.imageHeight + RESERVED_HEIGHT(40)
//初始化的时候列表设置top值:为了列表向上滚动而进行traslate3d
this.$refs.list.$el.style.top = `${this.$refs.bgImage.clientHeight}px`
},
左侧滚动
触发滚动事件
scroll(pos) {
this.scrollY = pos.y
},
监听滚动位置scrollY
watch: {
scrollY(newY) {
//往上滑动newY是负数 translateY往上移动是负数
//没有滑到临界值的时候translateY=newY 滑动顶部40的时候translateY=this.minTranslateY
let translateY = Math.max(this.minTranslateY, newY)
this.$refs.layer.style['transform'] = `translate3d(0, ${translateY}px,0)`
this.$refs.layer.style['webkitTransform'] = `translate3d(0, ${translateY}px,0)`
let zIndex = 0
//缩放
let scale = 1
//比例
let perscent = Math.abs(newY / this.imageHeight)
//高斯模糊
let blur = 0
//下拉的时候
if (newY > 0) {
scale = 1 + perscent
zIndex = 10
} else {
//上滑的时候:高斯模糊
blur = Math.min(20 * perscent, 20)
}
if (newY < this.minTranslateY) {
//上滑 `过` 临界值的时候,背景图片相应改变,按钮消失
zIndex = 10
this.$refs.bgImage.style.paddingTop = 0
this.$refs.bgImage.style.height = `${RESERVED_HEIGHT}px`
this.$refs.playButton.style.display = 'none'
} else {
//下滑 `未过` 临界值的时候
this.$refs.bgImage.style.paddingTop = '70%'
this.$refs.bgImage.style.height = '0'
this.$refs.playButton.style.display = ''
}
this.$refs.bgImage.style.zIndex = zIndex
//为什么从顶部显示scale缩放:因为下面的CSS .bg-image中 transform-origin: top
//下拉的时候放大效果
this.$refs.bgImage.style[transform] = `scale(${scale})`
//高斯模糊 IOS
this.$refs.bgImage.style[backdrop] = `blur(${blur}px)`
}
},
3.浏览器前缀
在使用transform以及back-drop的时候,需要根绝浏览器添加一些前缀,封装成方法调用
let elementStyle = document.createElement('div').style
//自执行函数:浏览器兼容的前缀
let vender = (() => {
const tranforNames = {
webkit:'webkitTransfrom',
Moz:'MozTransfrom',
O:'OTransfrom',
ms:'msTransfrom',
standard:'standard'
}
for(let key in transforNames){
if(elementStyle[transfromNames[key]] !== undefined){
return key
}
}
return false
})()
export function prefixStyle(style){
if(vendor === false){
return false
}
if(ventor === 'standard'){
return style
}
return vendor + style.charAt(0).toUpperCase() + style.substr(1)
}
在music-list.vue中引入
const transform = prefixStyle('transform')
4.song-list.vue
列表很常见,封装成组件song-list.vue
传入songs数据
功能:展示数据,传出点击的数据
{{song.name}}
{{getDesc(song)}}
methods:{
getDesc(song) {
return `${song.singer} . ${song.album}`
},
selectItem(item, index) {
this.$emit('select', item, index)
},
}
music功能 vue_vue_music:歌手详情页相关推荐
- vue音乐项目歌手详情页小结
技术栈 1,vue 2,vuex 3,vue-router(子路由) 需求分析 1)歌手列表点击歌手会跳转到下级页面歌手详情页,歌手详情页由四个部分组成 歌手图片 返回按钮:点击返回歌手tab页 随机 ...
- 第6章 歌手详情页开发
包括子路由的配置及转场动画实现.Vuex 的介绍.Vuex 初始化歌手数据的配置.歌手详情页数据抓取和处理.Song 类的封装.music-list 组件开发. 6-1 歌手详情页布局和设计详解 6- ...
- 新闻管理的删除功能+新闻首页+详情页
新闻管理的删除功能+新闻首页+详情页 1.删除功能: 在NewService中增加deleteNew接口: void deleteNew(Long id); 在NewServiceImpl中实现: @ ...
- 互联网早报:淘客APP开放新功能 增加定制详情页及私域购物车...
行业热点 1.淘客APP开放新功能 增加定制详情页及私域购物车: 2.荣耀俱乐部 App 即将上线:荣耀产品相关内容.活动随后迁移: 3."高途课堂"于近日开始无偿接收优胜教育旗下 ...
- 微信小程序之网易云音乐(四)- 排行、歌手及歌手详情页模块开发
微信小程序之网易云音乐(四)- 排行.歌手及歌手详情页模块开发 一. 排行模块开发 二. 歌手模块开发 三. 歌手详情页开发 微信小程序之网易云音乐导航 一. 排行模块开发 rank.vue文件: & ...
- SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)
目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...
- 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能
文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...
- 歌手详情页:下拉方大歌手图片
1.缩放图片: 1 // 背景图片的缩放 2 let scale = 1 3 const percent = Math.abs(newY/this.imageHeight)//这么计算,图片的高度相当 ...
- uni-app实战之社区交友APP(8)搜索列表页和文章详情页开发
文章目录 前言 一.搜索列表页开发 1.搜索类型传递和占位符设置 2.搜索功能实现 二.帖子详情页开发 1.pages.json配置和页面通信 2.公共列表组件功能优化 3.详情页关注和顶踩功能完善 ...
最新文章
- 硕士Nature一作谈回乡当公务员:考公竞争激烈,科研经历是宝贵财富
- argparse subparsers()
- PHP代码程序,php代码自动执行
- keil查看程序运行时间_Keil系列教程05_工程目标选项配置(一)
- Nginx静态资源盗链的效果展示
- 为人示弱,做事留余 | 摸鱼系列
- linux模块创建proc,[Linux 运维]/proc/modules 以及内核模块工具
- [转载] Python利用openpyxl模块读取excel文件内容
- Netty高性能之道
- java网页版斗地主_JAVA控制台版斗地主
- 二进制和十进制的转换
- 龙卷风收音机android安卓版,龙卷风收音机安卓版
- MongoDB从入门到熟悉
- linux怎么越狱苹果手机,如何在苹果手机使用unc0ver越狱
- 使用Microsoft.Office.Interop.Excel批量编辑Excel文件
- 先帝爷下南阳御驾三请,联东吴灭曹魏鼎足三分~~~
- lyapunov直接法
- 读ICCV Best Student Paper有感
- 你真的能解释工厂模式吗?不屑解释工厂模式的大牛不是真牛
- 树莓派救援机器人制作