赞
踩
一起白嫖,简要快速的建立一个网站音乐播放器,在我研究一番之后直接给大家总结出结果
还未完全美化好的案例图
一共四个文件
上述的四个文件名可随意更改 看自己喜好
以及对应音乐和图片等放在对应路径下,也可以自己改,琢磨下就能看懂
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>psh</title>
- <link rel="stylesheet" type="text/css" href="../static/css/vide.css">
- <body>
- <audio src="" id="audio-source"></audio>
- <section class="home-section">
- <div class="carousel">
- <img src="../static/img/xx1.jpg" class="active" alt="">
- <img src="../static/img/xx2.jpg" alt="">
- <img src="../static/img/xx3.jpg" alt="">
- <img src="../static/img/xx4.jpg" alt="">
- <img src="../static/img/xx5.jpg" alt="">
- </div>
- <h1 class="heading">最近播放</h1>
- <div class="playlists-group">
- <div class="playlist-card">
- <img src="../static/img/xx2.jpg" class="playlist-card-img" alt="">
- <p class="playlist-card-name">华语热歌</p>
- </div>
- <div class="playlist-card">
- <img src="../static/img/xx2.jpg" 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="../static/img/xx2.jpg" class="playlist-card-img" alt="">
- <p class="playlist-card-name">失恋回忆</p>
- </div>
- <div class="playlist-card">
- <img src="../static/img/xx2.jpg" class="playlist-card-img" alt="">
- <p class="playlist-card-name">经典老歌</p>
- </div>
- //+3
- </div>
- </section>
-
- <section class="music-player-section ">
-
- <img src="../static/img/xx1.jpg" width="50px" class="back-btn icon hide" alt="">
- <img src="../static/img/xx5.jpg" width="50px" class="nav-btn icon hide" alt="">
-
- <h1 class="current-song-name">song 1</h1>
- <p class="artist-name hide">artist 1</p>
-
- <img src="../static/img/xx5.jpg" 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>
- <section class="playlist ">
-
- <img src="../static/img/xx1.jpg" width="50px" class="back-btn icon" alt="">
-
- <h1 class="title">播放列表</h1>
-
- <div class="queue active">
- <div class="queue-cover">
- <img src="../static/img/xx1.jpg" alt="">
- <i class="fas fa-pause"></i>
- </div>
- <p class="name">song 1</p>
- </div>
- // +7
- </section>
-
- <script type="application/javascript" src="../static/js/data.js"></script>
- <script type="application/javascript" src="../static/js/app.js"></script>
- </body>
- </html>

data.js
- let songs = [
- {
- name: '歌曲名字',
- path: '歌曲相对路径',
- artist: '歌手名字',
- cover: '封面图片相对路径'
- },
- //以下格式相同,自己添加想要的歌曲
- ]
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);
-
- //导航
-
- const musicPlayerSection = document.querySelector('.music-player-section');
- let clickCount = 1;
- musicPlayerSection.addEventListener('click', () => {
- if(clickCount >= 2){
- musicPlayerSection.classList.add('active');
- clickCount = 1;
- return;
- }
- clickCount++;
- setTimeout(() => {
- clickCount = 1;
- }, 250);
- })
-
- /// 从音乐播放器返回
- const backToHomeBtn = document.querySelector('.music-player-section .back-btn');
-
- backToHomeBtn.addEventListener('click', () => {
- musicPlayerSection.classList.remove('active');
- })
-
- /// 访问播放列表
- const playlistSection = document.querySelector('.playlist');
- const navBtn = document.querySelector('.music-player-section .nav-btn');
-
- navBtn.addEventListener('click', () => {
- playlistSection.classList.add('active');
- })
- // 从播放列表返回到音乐播放器
- const backToMusicPlayer = document.querySelector('.playlist .back-btn');
-
- backToMusicPlayer.addEventListener('click', () => {
- playlistSection.classList.remove('active');
- })
- //导航完成
-
- /// 音乐
-
- let currentMusic = 0;
-
- const music = document.querySelector('#audio-source');
-
- const seekBar = document.querySelector('.music-seek-bar');
- const songName = document.querySelector('.current-song-name');
- const artistName = document.querySelector('.artist-name');
- const coverImage = document.querySelector('.cover');
- const currentMusicTime = document.querySelector('.current-time');
- const musicDuration = document.querySelector('.duration');
-
- const queue = [...document.querySelectorAll('.queue')];
-
- // 在此处选择所有按钮
-
- const forwardBtn = document.querySelector('i.fa-forward');
- const backwardBtn = document.querySelector('i.fa-backward');
- const playBtn = document.querySelector('i.fa-play');
- const pauseBtn = document.querySelector('i.fa-pause');
- const repeatBtn = document.querySelector('span.fa-redo');
- const volumeBtn = document.querySelector('span.fa-volume-up');
- const volumeSlider = document.querySelector('.volume-slider');
-
-
- // 音乐设置功能
-
- const setMusic = (i) => {
- seekBar.value = 0;
- let song = songs[i];
- currentMusic = i;
-
- music.src = song.path;
-
- songName.innerHTML = song.name;
- artistName.innerHTML = song.artist;
- coverImage.src = song.cover;
-
- setTimeout(() => {
- seekBar.max = music.duration;
- musicDuration.innerHTML = formatTime(music.duration);
- }, 300);
- currentMusicTime.innerHTML = '00 : 00';
- queue.forEach(item => item.classList.remove('active'));
- queue[currentMusic].classList.add('active');
- }
-
- setMusic(0);
-
-
- // 格式持续时间为 00 : 00 格式
-
- const formatTime = (time) => {
- let min = Math.floor(time / 60);
- if(min < 10){
- min = `0` + min;
- }
-
- let sec = Math.floor(time % 60);
- if(sec < 10){
- sec = `0` + sec;
- }
-
- return `${min} : ${sec}`;
- }
-
-
- // playBtn 点击事件
-
- playBtn.addEventListener('click', () => {
- music.play();
- playBtn.classList.remove('active');
- pauseBtn.classList.add('active');
- })
-
- // pauseBtn 点击事件
-
- pauseBtn.addEventListener('click', () => {
- music.pause();
- pauseBtn.classList.remove('active');
- playBtn.classList.add('active');
- })
-
-
- // 向前按钮
-
- forwardBtn.addEventListener('click', () => {
- if(currentMusic >= songs.length - 1){
- currentMusic = 0;
- } else{
- currentMusic++;
- }
- setMusic(currentMusic);
- playBtn.click();
- })
-
- // 后退按钮
-
- backwardBtn.addEventListener('click', () => {
- if(currentMusic <= 0){
- currentMusic = songs.length - 1;
- } else{
- currentMusic--;
- }
- setMusic(currentMusic);
- playBtn.click();
- })
-
- // 搜索栏事件
-
- setInterval(() => {
- seekBar.value = music.currentTime;
- currentMusicTime.innerHTML = formatTime(music.currentTime);
- if(Math.floor(music.currentTime) == Math.floor(seekBar.max)){
- if(repeatBtn.className.includes('active')){
- setMusic(currentMusic);
- playBtn.click();
- } else{
- forwardBtn.click();
- }
- }
- }, 500)
-
- seekBar.addEventListener('change', () => {
- music.currentTime = seekBar.value;
- })
-
-
- // 刷新按钮
-
- repeatBtn.addEventListener('click', () => {
- repeatBtn.classList.toggle('active');
- })
-
- // 音量部分
-
- volumeBtn.addEventListener('click', () => {
- volumeBtn.classList.toggle('active');
- volumeSlider.classList.toggle('active');
- })
-
- volumeSlider.addEventListener('input', () => {
- music.volume = volumeSlider.value;
- })
-
- queue.forEach((item, i) => {
- item.addEventListener('click', () => {
- setMusic(i);
- playBtn.click();
- })
- })
-

style.css
- /*播放器*/
- @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;
- }
- .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;
- }
- .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);
- }
- .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;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。