Vue3+node.js网易云音乐实战项目(六)

其他页面可以看我页面专栏 Vue3实战项目-网易云APP 。
如果文章对你有帮助请点一个赞或收藏

1、收藏、评论和分享图标

image-20220626105920629

接下来,我们实现这个位置,首先给新建一个子组件listviewIcon.vue,并且在listview.vue注册一下,并把参数传递给子组件

image-20220626110048110

然后,我们在子组件中把我们用的图标弄好

<template>
    <div class="listviewIcon">
        <div class="collectIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-shoucangjia"></use>
            </svg>
        </div>
        <div class="commentIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-pinglun-"></use>
            </svg>
        </div>
        <div class="shareIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-fenxiang"></use>
            </svg>
        </div>
    </div>
</template>

image-20220626111406835

然后我们给这个大的div盒子一个边框然后利用flex横排列,并且使盒子居中

.listviewIcon{
    width: 5rem;
    display: flex;
    justify-content: space-around;
    border: 1px solid red;
    border-radius: 20px;
    padding: 10px;
    margin: 0.7rem auto;
    background: #fff;
}

image-20220626111658719

然后我们把评论数这些接收一下,放在页面上。

    <div class="listviewIcon">
        <div class="collectIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-shoucangjia"></use>
            </svg>
            <p>{{playlist.subscribedCount}}</p>
        </div>
        <div class="commentIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-pinglun-"></use>
            </svg>
            <p>{{playlist.commentCount}}</p>
        </div>
        <div class="shareIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-fenxiang"></use>
            </svg>
            <p>{{playlist.shareCount}}</p>
        </div>
    </div>

image-20220626145302812

左右很排列居中一下。

    .listviewIcon div:nth-child(n){
        display: flex;
        justify-content: center;
        align-items: center;
    }

image-20220626151249196

然后给出了第一个,其他两个加一个左竖线

    .listviewIcon div:nth-child(n + 2) {		//n+2就是从第二个元素开始往后所有的元素
        border-left: 1px solid rgba(77, 77, 77, 0.5);
        padding-left: 20px;
    }

image-20220626151644492

然后这个就做好了。我们把页面的返回做一下,点击返回图标返回到主页

image-20220626151925423

这里很简单,只需要设置一下路由的返回就可以了,我们找到这个图标在listviewTop.vue下,添加点击命令

                <!-- 返回按钮 -->
                <div class="back" @click="$router.back()">
                </div>

image-20220626152112090

354624242321321

2、播放列表

然后,我们来做播放列表

image-20220626152521819

然后这里我稍微调整了一下,图标列表和播放列表一个在上面一个在下面,跟头像的原理一样,然后我做了一下调整,在listviewIcon.vue下,新增下面这几个

    position: absolute;
    z-index: 1;
    left: 0.7rem;
    top: 4.5rem;

删除了自动居中,阴影调小了一点

image-20220626163704913

image-20220626163904300

然后调整一下playlistView.vue的顶部距离

.playlistView{
    width: 7.5rem;
    background-color: rgb(255, 255, 255);
    margin-top:1rem;
}

image-20220626193515878

然后这个弧线,由于我始终都没有实现就没有写.那么我们先把图标填上,

      <!-- 图标栏 -->
      <div class="playlistIcon">
          <div class="leftIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-bofang"></use>
            </svg>
            <p  class="words">播放全部</p>
            <p class="count">({{playlist.tracks.length}})</p>
          </div>
          <div class="rightIcon">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-xiazai"></use>
            </svg>
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-quanxuan"></use>
            </svg>
          </div>
      </div>
      <!-- 播放列表栏 -->
      <div class="playlists"></div>

image-20220627110045764

注意这里的20是请求歌单的数量,还是需要在listview.vue上设置

image-20220627110150236

然后子组件接收一下,父组件传过来的数据,然后我们调整一下样式

    .icon{
        width: 0.5rem;
        height: 0.5rem;
    }
    .words{
        margin-right: 5px;
        line-height: 0.5rem;
    }
    .count{
        font-size: 10px;
        line-height: 0.5rem;
    }
.playlistIcon{
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.playlistIcon div:nth-child(n){
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.rightIcon svg:nth-child(1){
    margin-right: 15px;
}
.leftIcon svg:nth-child(1){
    margin-right: 15px;
    fill: red;
}

image-20220627110457546

这上面的图标部分,我们就完成了,接下来我们做列表的部分,里面的数据是接口tracks部分的,al代表的是专辑,ar代表的是作者

image-20220627151528977

      <!-- 播放列表栏 -->
      <div class="playlists">
          <div class="playItem" v-for="(item,i) in playlist.tracks" :key="i">
            <!-- 列表左边区域 -->
              <div class="left">
                  <!-- 编号 -->
                  <div class="index">{{i+1}}</div>
                  <div class="content">
                      <!-- 音乐名 -->
                      <div class="title">{{item.name}}</div>
                      <!-- 作者名和专辑名 -->
                      <div class="anthor">{{item.ar[0].name}}-{{item.al.name}}</div>
                  </div>
              </div>
              <!-- 列表右边区域 -->
              <div class="right">
                  <!-- 图标部分 -->
                <svg class="icon" aria-hidden="true">
                    <use xlink:href="#icon-bofang"></use>
                </svg>
                <svg class="icon" aria-hidden="true">
                    <use xlink:href="#icon-gengduo-shuxiang"></use>
                </svg>
              </div>
          </div>
      </div>

image-20220627151425116

然后都是左右分布的形式,我们把它弄成一个左右分布利用flex

.playlists{
    .playItem{
        display: flex;
        justify-content: space-between;
        .left{
            display: flex;
            justify-content: space-between;
            .content{
                
            }  
        }
    }
}

image-20220627152238500

然后再来调整字体大小颜色,先从左边开始,调整编号

            .index{
                width: 0.5rem;
                font-size: 20px;
                opacity: 0.5;
                display: flex;
                justify-content:center; 
                align-items:center; 
            }

image-20220627155124391

然后,在调整一下,音乐名和专辑

            .content{
                margin-left: 0.4rem;
                .anthor{
                    font-size: 10px;
                    opacity: 0.5;
                }
            }  

image-20220627155215080

现在调整右边的按钮,给它透明度调低,边距调整一下

        .right{
            .icon{
                width: 0.5rem;
                height: 0.5rem;
                opacity: 0.5;
                margin-left: 15px;
            }
        }

image-20220627161545019

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周粥粥ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值