使用 HTML、CSS 和 JS 创建在线音乐播放器(含免费完整源码)(2)


在我们开始编写代码之前。虽然它不是 Nodejs 应用程序,但我们至少应该看到它的文件夹结构。

在这里插入图片描述

你可以看到我们有一个data.js文件,该文件包含我们的音乐相关数据。你可以在下面看到。


let songs = [

    {

        name: 'song 1',

        path: 'assets/musics/Song 1.mp3',

        artist: 'artist 1',

        cover: 'assets/images/cover 1.png'

    },

    {

        name: 'song 2',

        path: 'assets/musics/Song 2.mp3',

        artist: 'artist 2',

        cover: 'assets/images/cover 2.png'

    },

    // 剩下8首歌曲格式同上

]



我们在这里存储了音乐相关数据。

然后现在让我们对主页部分进行编码。

🎯 home-section 首页部分


打开index.html和内部从编写基本的 HTML 结构开始。还链接style.css和两个 JS 文件。记得data.js在app.js. 否则我们将无法访问数据。

完成链接所有文件后,让我们创建第一件事。图像轮播。内部身体标签代码这个。


<section class="home-section">

    <div class="carousel">

        <img src="assets/images/cover 1.png" class="active" alt="">

        <img src="assets/images/cover 2.png" alt="">

        <img src="assets/images/cover 3.png" alt="">

        <img src="assets/images/cover 4.png" alt="">

        <img src="assets/images/cover 5.png" alt="">

    </div>

</section>



注意 - 将旋转木马包裹在home-section元素内。


@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700;900&display=swap');



*{

    margin: 0;

    padding: 0;

    box-sizing: border-box;

}



:root{

    --background: #141414;

    --text-color: #fff;

    --primary-color: #63ff69;

    --secondary-color: #000;

    --alpha-color: rgba(0, 0, 0, 0.5);

    --shadow: 0 15px 40px var(--alpha-color);

}



html{

    background: var(--background);

    display: flex;

    justify-content: center;

}



body{

    width: 100%;

    height: 100vh;

    max-width: 375px;

    position: relative;

    background: var(--background);

    font-family: 'roboto', sans-serif;

    color: var(--text-color);

}



::-webkit-scrollbar{

    display: none;

}



.home-section{

    width: 100%;

    padding: 20px;

    height: 100%;

    padding-bottom: 100px;

    overflow-y: auto;

}



/* carousel */



.carousel{

    width: 100%;

    height: 200px;

    overflow: hidden;

    border-radius: 20px;

    box-shadow: var(--shadow);

    position: relative;

}



.carousel img{

    position: absolute;

    width: 100%;

    height: 100%;

    object-fit: cover;

    opacity: 0;

    transition: 1s;

}



.carousel img.active{

    opacity: 1;

}



您可以看到我们在这里使用了 CSS 变量,因此我们将来可以轻松更改此音乐播放器主题。

输出

在这里插入图片描述

请注意,这是为移动视图设计的,这就是为什么我使用 chrome 检查器以移动尺寸查看它的原因。

现在创建水平滚动播放列表。放在home-section里面

HTML


<h1 class="heading">最近播放</h1>

<div class="playlists-group">

	<div class="playlist-card">

		<img src="assets/images/cover 9.png" class="playlist-card-img" alt="">

		<p class="playlist-card-name">华语热歌</p>

	</div>

	<div class="playlist-card">

		<img src="assets/images/cover 2.png" class="playlist-card-img" alt="">

		<p class="playlist-card-name">古风戏腔</p>

	</div>

	//+3 

</div>

<h1 class="heading">根据你的喜好</h1>

<div class="playlists-group">

	<div class="playlist-card">

		<img src="assets/images/cover 12.png" class="playlist-card-img" alt="">

		<p class="playlist-card-name">失恋回忆</p>

	</div>

	<div class="playlist-card">

		<img src="assets/images/cover 12.png" class="playlist-card-img" alt="">

		<p class="playlist-card-name">经典老歌</p>

	</div>

	//+3 

</div>



CSS


.heading{

    margin: 30px 0 10px;

    text-transform: capitalize;

    font-weight: 400;

    font-size: 30px;

}



/* playlists card */



.playlists-group{

    position: relative;

    width: 100%;

    min-height: 200px;

    height: auto;

    display: flex;

    flex-wrap: nowrap;

    overflow-x: auto;

}



.playlist-card{

    flex: 0 0 auto;

    max-width: 150px;

    height: 100%;

    margin-right: 20px;

}



.playlist-card-img{

    width: 100%;

    height: 150px;

    object-fit: cover;

    border-radius: 20px;

}



.playlist-card-name{

    width: 100%;

    text-align: justify;

    font-size: 20px;

    text-transform: capitalize;

    padding: 5px;

}



输出

在这里插入图片描述

我们完成了home section。但是我们的旋转木马还不起作用,所以让我们使用 js 让它工作。打开app.js文件并开始编码。


const carousel = [...document.querySelectorAll('.carousel img')];



let carouselImageIndex = 0;



const changeCarousel = () => {

    carousel[carouselImageIndex].classList.toggle('active');



    if(carouselImageIndex >= carousel.length - 1){

        carouselImageIndex = 0;

    } else{

        carouselImageIndex++;

    }



    carousel[carouselImageIndex].classList.toggle('active');

}



setInterval(() => {

    changeCarousel();

}, 3000);



您可以看到我们的轮播元素,每 3 秒切换一次图像active类。

在这里插入图片描述

现在让我们制作我们的播放器部分。

🍖 player-section 播放器部分


首先使其最小化视图。


<section class="music-player-section">



    <img src="assets/images/back.png" class="back-btn icon hide" alt="">

    <img src="assets/images/nav.png" class="nav-btn icon hide" alt="">



    <h1 class="current-song-name">song 1</h1>

    <p class="artist-name hide">artist 1</p>



    <img src="assets/images/cover 1.png" class="cover hide" alt="">



    <div class="seek-bar-container">

        <input type="range" class="music-seek-bar" value="0">

        <p class="current-time hide">00 : 00</p>

        <p class="duration hide">00 : 00</p>

    </div>



    <div class="controls">

        <span class="fas fa-redo"></span>

        <div class="main">

            <i class="fas fa-backward active"></i>

            <i class="fas fa-play active"></i>

            <i class="fas fa-pause"></i>

            <i class="fas fa-forward active"></i>

        </div>

        <input type="range" class="volume-slider" max="1" value="1" step="0.1">

        <span class="fas fa-volume-up"></span>

    </div>

</section>



如果你看到我们的播放器结构,你会注意到我们有很多hide元素的类。此类hide指示元素将在最小化视图中隐藏。我们为所有元素提供了相同的类,因此我们可以轻松地在 CSS 中设置它们的样式。


.music-player-section{

    width: 100%;

    height: 100px;

    position: fixed;

    bottom: 0;

    left: 0;

    background: var(--alpha-color);

    backdrop-filter: blur(50px);

    transition: 1s;

}



.music-seek-bar{

    -webkit-appearance: none;

    width: 100%;

    position: absolute;

    top: -4px;

    height: 8px;

    background: var(--secondary-color);

    overflow: hidden;

}



.music-seek-bar::-webkit-slider-thumb{

    -webkit-appearance: none;

    height: 10px;

    width: 5px;

    background: var(--primary-color);

    cursor: pointer;

    box-shadow: -400px 0 0 400px var(--primary-color);

}



.current-song-name{

    font-weight: 300;

    font-size: 20px;

    text-align: center;

    margin-top: 5px;

    text-transform: capitalize;

}



.controls{

    position: relative;

    width: 80%;

    margin: auto;

    display: flex;

    justify-content: center;

    align-items: center;

    height: 60px;

    font-size: 30px;

}



.controls span{

    display: none;

    opacity: 0;

    transition: 1s;

}



.music-player-section.active .controls{

    justify-content: space-between;

}



.music-player-section.active .controls span{

    font-size: 25px;

    display: block;

    opacity: 0.5;

}



.music-player-section.active .controls span.active{

    color: var(--primary-color);

    opacity: 1;

}



.controls .main i{

    margin: 0 5px;

    display: none;

}



.controls .main i.active{

    display: inline;

}



现在让我们创建最大化视图的样式。


.music-player-section .hide{

    display: none;

    opacity: 0;

    transition: 1s;

}



.music-player-section.active .hide{

    display: block;

    opacity: 1;

}



.music-player-section.active{

    width: 100%;

    height: 100%;

    padding: 30px;

    display: flex;

    flex-direction: column;

}



.music-player-section.active .music-seek-bar{

    position: relative;

    display: block;

    border-radius: 50px;

    margin: auto;

}



.music-player-section.active .current-song-name{

    font-size: 40px;

}



.music-player-section.active .controls{

    width: 100%;

    font-size: 50px;

}



.artist-name{

    text-align: center;

    font-size: 20px;

    text-transform: capitalize;

}



.cover{

    width: 30vh;

    height: 30vh;

    object-fit: cover;

    margin: auto;

    border-radius: 20px;

    box-shadow: var(--shadow);

}



.current-time{

    position: absolute;

    margin-top: 5px;

    left: 30px;

}



.duration{

    position: absolute;

    margin-top: 5px;

    right: 30px;

}



.icon{

    position: absolute;

    top: 60px;

    transform: scale(1.3);

}



.back-btn{

    left: 40px;

}



.nav-btn{

    right: 40px;

}



/* volume button */



.volume-slider{

    -webkit-appearance: none;

    width: 100px;

    height: 40px;

    position: absolute;

    right: -35px;

    bottom: 80px;

    transform: rotate(-90deg);

    border-radius: 20px;

    background: var(--alpha-color);

    overflow: hidden;

    opacity: 0;

    display: none;

}



.volume-slider.active{

    opacity: 1;

    display: block;

}



.volume-slider::-webkit-slider-thumb{

    -webkit-appearance: none;

    height: 40px;

    width: 10px;

    background: var(--primary-color);

    box-shadow: -200px 0 1px 200px var(--primary-color);

}



输出

在这里插入图片描述

并检查这些样式,现在像这样将active添加到 class music-player-section 中去。


<section class="music-player-section active">

...

</section>



输出

在这里插入图片描述

我们最终会让这个播放器发挥作用。现在从player section类删除这个active。让我们创建播放列表部分。

🏆 playlist-section 播放列表部分



<section class="playlist active">



    <img src="assets/images/back.png" class="back-btn icon" alt="">



    <h1 class="title">播放列表</h1>



    <div class="queue active">

        <div class="queue-cover">

            <img src="assets/images/cover 1.png" alt="">

            <i class="fas fa-pause"></i>

        </div>

        <p class="name">song 1</p>

    </div>

    // +7

</section>



CSS


.playlist{

    width: 100%;

    height: 100%;

    position: fixed;

    top: 0;

    right: -100%;

    padding: 30px 0;

    background: var(--background);

    z-index: 3;

    transition: 1s;

    overflow: auto;

}



.playlist.active{

    right: 0;

}



.title{

    font-weight: 300;

    font-size: 40px;

    text-align: center;

    margin-top: 15px;

    text-transform: capitalize;

    margin-bottom: 30px;

}



.queue{

    width: 100%;

    height: 80px;

    padding: 0 30px;

    display: flex;

    align-items: center;

    border-top: 2px solid var(--alpha-color);

}



.queue-cover{

    width: 60px;

    height: 60px;

    border-radius: 10px;

    overflow: hidden;

    margin-right: 20px;

    position: relative;

}



.queue-cover img{

    width: 100%;

    height: 100%;

    object-fit: cover;

}



.queue-cover i{

    position: absolute;

    top: 50%;

    left: 50%;

    transform: translate(-50%, -50%);

    font-size: 30px;

    color: var(--primary-color);

    display: none;

}



.queue.active i{

    display: block;

}



.queue .name{

    font-size: 22px;

    text-transform: capitalize;

}



自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

top: 50%;

left: 50%;

transform: translate(-50%, -50%);

font-size: 30px;

color: var(--primary-color);

display: none;

}

.queue.active i{

display: block;

}

.queue .name{

font-size: 22px;

text-transform: capitalize;

}



**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中...(img-TyP4210L-1712642704552)]

 

[外链图片转存中...(img-DaZIbeUO-1712642704553)]

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个圆形的音乐播放器,可以使用CSS的一些属性和方法来实现。首先,在HTML创建一个音乐播放器的容器,可以使用div元素,并为其添加一个唯一的ID,例如"music-player"。 然后,在CSS中设置这个容器的样式。通过设置元素的宽度和高度为相同的值,并将边框半径设置为50%来创建一个圆形的形状。可以使用"border-radius"属性来实现这个效果。另外,可以设置背景颜色、文字颜色、边框样式等样式来自定义播放器的外观。 接下来,可以在容器中添加播放器的控制按钮和信息显示区域。可以使用HTML的按钮元素来创建播放、暂停、音量调节等按钮,并为其添加适当的类名以方便CSS样式的设置。还可以使用HTML的元素来显示音乐的标题、歌手等信息。 为播放器添加交互功能,可以使用CSS的伪类选择器和过渡效果。例如,当鼠标悬停在播放按钮上时,可以通过设置:hover伪类选择器来改变按钮的样式。可以使用过渡效果来实现平滑的样式切换,例如改变按钮的背景颜色或边框样式。 最后,使用JavaScript来为播放器添加播放、暂停、音量调节等功能。通过监听按钮的点击事件,可以调用相应的函数来处理播放器的操作。例如,点击播放按钮时,可以通过JavaScript播放音乐文件。 综上所述,通过以上步骤可以创建一个圆形的音乐播放器。具体的样式和功能可以根据实际需要进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值