vue学习总结(三,案例⽤vue开发⽹易云⾳乐(已实现在线播放和下载))效果如图:
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style lang="">
html,
body {
height:100%;
padding:0;
margin:0;
}
#app {
height:100%;
display: flex;
}
#app>#left {
flex:1;
background-color: skyblue;
text-align: center;
/* 超出滚动 */
overflow: scroll;
}
#app>#right {
#app>#right {
flex:1;
background-color: orange;
}
ul {
list-style: none;
padding:0;
}
input {
width:469px;
height:56px;
margin:10px auto;
border-radius:10px;
outline: none;
font-size:24px;
border:0;
padding-left:15px;
}
#left li {
width:451px;
/* height: 35px; */
margin:0 auto;
font-weight:700;
border:2px solid black;
line-height:35px;
color: white;
background-color: cadetblue;
overflow: hidden;
text-overflow: ellipsis;
display:-webkit-box;
max-height:35px;
-webkit-line-clamp:1;
-webkit-box-orient: vertical;
}
#left li:hover {
cursor: pointer;
background-color: greenyellow;
color: red;
}
#right {
position: relative;
overflow: scroll;
}
audio {
/* position: absolute;
left: 50%;
transform: translateX(-50%) translateY(46px); */            display: block;
margin:0 auto;
}
/* li标签过渡的样式 */
.list-item {
display: inline-block;
margin-right:10px;
}
.list-enter-active,
.list-leave-active {
.list-leave-active {
transition: all 1s;
}
.list-enter,
.list-leave-to{
opacity:0;
transform:translateX(100px);
}
/* 设置专辑图⽚样式 */
.cover{
width:260px;
height:260px;
border-radius:50%;
display: block;
margin:10px auto;
/* transform: translateX(-50%) translateY(10px); */
}
/* 动画 */
@keyframes autoRotate{
to{
transform:rotateZ(360deg);
}
}
/* 动画播放样式 */
.autoRotate{
/* 动画名,⼀直播放iteration(⼀直重复),匀速(timing),时间2s(duration),状态(running) */          animation-name:autoRotate;
animation-iteration-count:infinite;
animation-timing-function: linear;
animation-duration:2s;
animation-play-state:running;
}
/* 动画状态 */
.pause{
animation-play-state:paused;
}
/* 评论 */
ment{
height:150px;
/* background-color: skyblue; */
}
.
comment li{
display: flex;
padding:5px;
}
ment li .left{
width:120px;
height:120px;
}
ment li .left img{
width:100px;
}
.
comment li a{
text-decoration: none;
font-weight: bold;
color: crimson;
}
</style>
</head>
<body>
<div id="app">
<div id="app">
<!--左边-->
<div id="left">
<input type="text" value="请输⼊你要搜索的歌名" v-model="inputValue" @="search">
<!--给li添加过渡;v-on:after-enter="afterEnter":钩⼦函数-->
<transition-group name="list" tag="ul" v-on:after-enter="afterEnter">
<!--play(item.id):把id传过去-->
<li v-for="(item, index) in musicList":key="item.id" @dblclick="playMusic(item.id,item.album.id)":> {{item.name}}-----演唱者:{{item.artists[0].name}}
</li>
</transition-group>
</div>
<!--右边,播放-->
<div id="right">
<!--专辑页⾯-->
<img :src="picUrl" alt=""class="cover autoRotate":class="{pause:isPause}">
<!-- autoplay:⾃动播放,controls显⽰控件;@play="play"是⾃定义⽅法-->
<audio :src="songUrl" autoplay controls @play="play" @pause="pause"></audio>
<h3>精彩评论</h3>
<div class="comment">
<ul>
<!--遍历数组时,需要动画时才⽤到key -->
<li v-for="(item, index) in comments">
<div class="left">
<img :src="item.user.avatarUrl" alt="">
</div>
<div class="right">
<a href="#">{{item.user.nickname}}</a>
<p>{{t}}</p>
</div>
</li>
</ul>
</div>
</div>
</div>
rightv>
</body>
<!--导⼊vue -->
<script src="cdn.jsdelivr/npm/vue/dist/vue.js"></script>
<!--导⼊vue插件-->
<script src="cdn.jsdelivr/npm/vue-resource@1.5.1"></script>
<script>
//代码
/*
⾳乐播放器
需求1:
搜索歌曲
发送⽹络请求
回调函数函数中渲染数据
有动画
需求2:
双击播放歌曲
根据id调⽤接⼝
查询数据
通过audio播放歌曲
获取专辑的信息进⽽获取封⾯展⽰给⽤户
需求3
播放歌曲时
封⾯转动
暂停播放时
封⾯停⽌转动
步骤:
1.先写动画样式,动画命名为autoRotate,因为是⼀直运动,所以使⽤animation;
1.先写动画样式,动画命名为autoRotate,因为是⼀直运动,所以使⽤animation;
2.同时写⼀个暂停的样式,命名为pause,给data添加⼀个isPause来存值,默认给⼀个false
3.添加运动和暂停的步骤是添加上⾯的两个类,但是pause要使⽤v-bind指令来设置属性;
4.在audio⾳频⾥添加播放和暂停的点击⽅法,在对应的⽅法⾥设置对应的布尔值;
需求4
点击播放歌曲
同时获取这⾸歌的评论
步骤:1.在数据中声明⼀个comments的空数组,⽤来存评论内容
2.在播放⽅法中写获取评论的接⼝
3.在响应体⾥将内容赋值给声明的数组
*/
let app =new Vue({
el:"#app",
blur事件
data:{
inputValue:'',//输⼊的值
musicList:[],//存储歌列表
songUrl:'',//播放歌曲的url
picUrl:'',//获取专辑信息
isPause:false,//专辑是否暂停
comments:[]//评论内容
},
methods:{
// li标签过渡的事件
randomIndex:function(){
return Math.floor(Math.random()*this.items.length)
},
add:function(){
this.items.splice(this.randomIndex(),Num++)
},
remove:function(){
this.items.splice(this.randomIndex(),1)
},
//搜索歌曲事件
search(){
//调⽤接⼝
this.$(`autumnfish/search?keywords=${this.inputValue}`).then(response =>{
// console.log(response);
//将结果添加到musicList中
this.musicList = sult.songs;
}, response =>{
// error callback
alert("出错了")
});
},
// 双击播放歌曲事件,接收传过来的id
playMusic(id,albumId){
//获取歌曲的url
this.$(`autumnfish/song/url?id=${id}`).then(response =>{
// console.log(response);
/
/将结果添加到musicList中
this.songUrl = response.body.data[0].url;
}, response =>{
// error callback
alert("出错了")
});
// 获取专辑信息
this.$(`autumnfish/album?id=${albumId}`).then(res=>{
this.picUrl=res.body.album.blurPicUrl;
}),err=>{}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。