HTML5环形音乐播放器详解编程语言

通过 HTML5,音乐在网络上东山再起。添加音频文件就像插入图像那样简单,并且用户能在浏览器外播放音乐,从而实现惊人的音乐体验。<audio> 标签的推出使您不再需要外部音乐播放器,在网站上实现真正的声音融合。

随着 HTML5 的出现,发生了一些重大变化,特别是在音乐和音频方面。开发人员不再要求 web 冲浪者使用 Adobe Flash、Apple QuickTime 或 Microsoft Windows 媒体播放器等特殊的播放器。这意味着用户不必担心是否有最新的兼容插件(或任何播放器插件)。他们只需打开自己喜欢的浏览器并聆听能发出声音的任何内容, 如音乐、有声读物、FX 声音效果或朋友和家人录制的消息。

好吧,直接看代码:

    <!DOCTYPE html>   
<html>   
<head>   
<meta charset="UTF-8">   
<title>HTML5环形音乐播放器</title>   
<link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />   
</head>   
<body>   
<div style="text-align:center;clear:both">   
</div>   
<div id="container">   
<label class="to-back-label" for="to-back"><i class="fa fa-bars fa-lg"></i></label><!-- 歌曲播放列表按钮 -->   
<input type="checkbox" id="to-back">   
<canvas id="progress" width="320" height="320"></canvas><!-- 进度条 -->   
<div id="player">   
<audio id="audio" controls>   
<source src="爱的就是你.mp3" type="audio/mpeg" codecs="mp3"></source>           
</audio>   
<img src="album_cover.jpg"><!-- 专辑封面 -->   
<label class="to-lyrics-label" for="to-lyrics"><i class="fa fa-caret-down fa-lg"></i></label>   
<input type="checkbox" id="to-lyrics"><!-- 歌词切换 -->   
<div class="cover">   
<div class="controls">   
<button id="backward" title="播放模式"><i class="fa fa-retweet fa-lg"></i></button>   
<button id="backward" title="后退"><i class="fa fa-backward fa-2x"></i></button>             
<!-- 暂停 -->   
<button id="play-pause" title="暂停" onclick="togglePlayPause()"><i class="fa fa-play fa-3x"></i></button>   
<!-- 前进 -->   
<button id="forward" title="前进"><i class="fa fa-forward fa-2x"></i></button>   
<!-- 循环播放 -->   
<button id="backward" title="循环播放"><i class="fa fa-random fa-lg"></i></button>   
<!-- 音量控制 -->   
<input id="volume" name="volume" min="0" max="1" step="0.1" type="range" onchange="setVolume()" />   
</div>   
<div class="info">   
<p class="song"><a href="#" target="_blank">爱的就是你</a></p>   
<p class="author"><a href="#" target="_blank">王力宏</a></p>   
</div>   
<div class="lyrics">   
<p>爱的就是你</p>   
<p>演唱:王力宏</p>   
<p></p>    
<p>失去才会懂得珍惜</p>   
<p>但我珍惜你</p>   
<p>伤越痛就是爱越深</p>   
<p>我不相信</p>   
<p>你和我同时停止呼吸</p>   
<p>每一次我们靠近</p>   
<p>你让我忘了困惑</p>   
<p>忘了所有烦心</p>   
<p>我把你紧紧拥入怀里</p>   
<p>捧你在我手心</p>   
<p>谁叫我真的爱的就是你</p>   
<p>在爱的纯净世界</p>   
<p>你就是我唯一</p>   
<p>永远永远不要怀疑</p>   
<p>我把你当作我的空气</p>   
<p>如此形影不离</p>   
<p>我大声说我爱的就是你</p>   
<p>在爱的幸福国度</p>   
<p>你就是我唯一</p>   
<p>我唯一爱的就是你</p>   
<p>我真的爱的就是你</p>   
<p></p>   
<p>失去才会懂得珍惜</p>   
<p>但我珍惜你</p>   
<p>伤越痛就是爱越深</p>   
<p>我不相信</p>   
<p>你和我同时停止呼吸</p>   
<p>每一次我们靠近</p>   
<p>你让我忘了困惑</p>   
<p>忘了所有烦心 OH</p>   
<p>我把你紧紧拥入怀里</p>   
<p>捧你在我手心</p>   
<p>谁叫我真的爱的就是你</p>   
<p>在爱的纯净世界</p>   
<p>你就是我唯一</p>   
<p>永远永远不要怀疑</p>   
<p>我把你当作我的空气</p>   
<p>如此形影不离</p>   
<p>我大声说我爱的就是你</p>   
<p>在爱的就幸福国度</p>   
<p>你就是我唯一</p>   
<p>我唯一爱的就是你</p>   
<p>我真的爱的就是你</p>   
<p>就是你 YEYE</p>   
<p>就是你</p>   
<p>就是你 YEYE</p>   
<p>唯一爱的就是你</p>   
<p></p>   
<p>我把你紧紧拥入怀里</p>   
<p>捧你在我手心</p>   
<p>谁叫我真的爱的就是你</p>   
<p>在爱的纯净世界</p>   
<p>你就是我唯一</p>   
<p>永远永远不要怀疑</p>   
<p>我把你当作我的空气</p>   
<p>如此形影不离</p>   
<p>我大声说我爱的就是你</p>   
<p>在爱的就幸福国度</p>   
<p>你就是我唯一</p>   
<p>我唯一爱的就是你</p>   
<p>我真的爱的就是你</p>   
<p>我唯一爱的就是你</p>   
<p>我真的爱的就是你</p>   
</div><!-- 歌词 -->   
<p class="scroll">向下滚动</p>   
</div>   
</div><!-- #播放列表 -->   
<div id="flip-back">   
<ul class="playlist">   
<h3>专辑列表</h3>   
<li><a href="#">1. 习大大爱着彭麻麻</a></li>   
<li><a href="#">2. 一路上有你</a></li>   
<li><a href="#" style="color:#26C5CB;"><i class="fa fa-play" style="margin-right:4px;"></i> 3. 爱的就是你</a></li><!-- 正在播放列表 -->   
<li><a href="#">4. 老公赚钱老婆花</a></li>   
<li><a href="#">5. 北京北京</a></li>   
<li><a href="#">6. 小苹果</a></li>   
<li><a href="#">7. 好男人都死哪去了</a></li>   
<li><a href="#">8. 你是我的眼</a></li>   
<li><a href="#">9. 朋友</a></li>   
<li><a href="#">10. 吻别</a></li>   
</ul>   
</div>   
</div>   
<!-- 如有不懂,请加qq群:135430763共同学习! -->   
<!-- 另一篇播放器地址:http://blog.csdn.net/xmtblog/article/details/32957663 -->   
<script src="js/index.js"></script>   
</body>   
</html>  

    var audio = document.getElementById('audio');   
var progress = document.getElementById('progress');   
var playpause = document.getElementById("play-pause");   
var volume = document.getElementById("volume");   
audio.controls = false;   
audio.addEventListener('timeupdate', function() {   
updateProgress();   
}, false);   
/**  
* 暂停播放  
*/   
function togglePlayPause() {   
if (audio.paused || audio.ended) {   
playpause.title = "Pause";   
playpause.innerHTML = '<i class="fa fa-pause fa-3x"></i>';   
audio.play();   
} else {   
playpause.title = "Play";   
playpause.innerHTML = '<i class="fa fa-play fa-3x"></i>';   
audio.pause();   
}   
}   
/**  
* 设置音量  
*/   
function setVolume() {   
audio.volume = volume.value;   
}   
/**  
* 更新进度  
*/   
function updateProgress() {   
var percent = Math.floor((100 / audio.duration) * audio.currentTime);   
progress.value = percent;   
var canvas = document.getElementById('progress');   
var context = canvas.getContext('2d');   
var centerX = canvas.width / 2;   
var centerY = canvas.height / 2;   
var radius = 150;   
var circ = Math.PI * 2;   
var quart = Math.PI / 2;   
var cpercent = percent / 100;    
context.beginPath();   
context.arc(centerX, centerY, radius, 0, ((circ) * cpercent), false);   
context.lineWidth = 10;   
context.strokeStyle = '#26C5CB';   
context.stroke();   
if (audio.ended) resetPlayer();   
}   
function resetPlayer() {   
audio.currentTime = 0; context.clearRect(0,0,canvas.width,canvas.height);   
playpause.title = "Play";   
playpause.innerHTML = '<i class="fa fa-play fa-3x"></i>';   
}  

    /* Font Awesome */   
@import url(http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css);   
/* Roboto Condensed */   
@import url(http://fonts.googleapis.com/css?family=Roboto+Condensed:300);   
/* Basic */   
*, *:before, *:after { box-sizing: border-box; }   
body { margin: 0; min-height: 100%; background: #EEE; font-family: 'Roboto Condensed', sans-serif; font-weight: 300; }   
a { color: #FFF; text-decoration: none; }   
a:hover { color: #26C5CB; }   
p { margin: 0; }   
.credits { position: absolute; left: 20px; bottom: 20px; color: #ccc; font-size: 14px; }   
.credits a  { color: #26C5CB; }   
/* Centering */   
#container, #progress, #player, #flip-back, .cover, .playlist {   
position: absolute;   
margin: auto;   
top: 0;   
left: 0;   
right: 0;   
bottom: 0;   
}   
#container {   
width: 320px;   
height: 320px;   
perspective: 550px;   
-webkit-perspective: 550px;   
transform-style: preserve-3d;   
-webkit-transform-style: preserve-3d;   
}   
#player {   
width: 300px;   
height: 300px;   
background: #fff;   
border-radius: 50%;   
overflow: hidden;   
box-shadow: 2px 2px 20px 0 rgba(0,0,0,.3);   
z-index: 300;   
}   
#progress {   
width: 320px;   
height: 320px;   
z-index: 200;   
transform: rotate(147deg);   
-webkit-transform: rotate(147deg);   
filter: blur(1px);   
-webkit-filter: blur(1px);   
transition: all .5s ease-in-out;   
-webkit-transition: all .5s ease-in-out;   
}   
#flip-back {   
width: 300px;   
height: 300px;   
background: #4D4D4D;   
border: 4px solid #AEAEAE;   
border-radius: 50%;   
overflow: hidden;   
box-shadow: inset 0 -10px 10px -5px rgba(0,0,0,.3), 2px 2px 20px 0 rgba(0,0,0,.3); /* inner + outer */   
transform: rotateY(-180deg);   
-webkit-transform: rotateY(-180deg);   
}   
/* Album Cover */   
img {   
width: 100%;   
height: 100%;   
background: #fff;   
opacity: .75;   
transition: .3s all ease-in-out;   
-webkit-transition: .3s all ease-in-out;   
}   
/* Fade */   
#container:hover .cover,   
#container:hover .to-lyrics-label,   
#container:hover .to-back-label {   
opacity: .9;   
}   
.cover,   
.to-lyrics-label,   
.to-back-label {   
opacity: .3;   
transition: all .3s ease-in-out;   
-webkit-transition: all .3s ease-in-out;   
}   
/* Player Buttons */   
.controls {   
position: relative;   
width: 100%;   
color: #fff;   
text-align: center;   
}   
button {   
margin: 10px;   
color: #fff;   
background: transparent;   
border: 0;   
outline: 0;   
cursor: pointer;   
text-align: center;   
text-shadow: 1px 1px 3px #000;   
transition: all .3s ease-in-out;   
-webkit-transition: all .3s ease-in-out;   
}   
button:hover {   
color: #26C5CB;   
}   
#play-pause {   
width: 46px;   
height: 46px;   
transition: all .5s ease-in-out;   
-webkit-transition: all .5s ease-in-out;   
}   
/* Song Info */   
.info {   
position: relative;   
margin-top: 28px;   
bottom: 10px;   
color: #fff;   
text-align: center;   
text-shadow: 1px 1px 3px #000;   
}   
.song {   
font-size: 18px;   
}   
.author {   
font-size: 14px;   
margin-bottom: -8px;   
}   
/* ... */   
.song,   
.author,   
.playlist a {   
white-space: nowrap;    
overflow: hidden;   
text-overflow: ellipsis;   
}   
/* Volume */   
input[type='range'] {   
display: block;   
margin: 14px auto;   
width: 80px;   
height: 2px;    
outline: 0;   
cursor: pointer;   
box-shadow: 1px 1px 3px 0 #000;   
-webkit-appearance: none !important;   
}   
input[type='range']::-webkit-slider-thumb {   
background: #AEAEAE;   
height: 6px;   
width: 6px;   
border-radius: 50%;   
transition: .1s all linear;   
-webkit-transition: .1s all linear;   
-webkit-appearance: none !important;   
}   
input[type='range']:hover::-webkit-slider-thumb {   
background: #26C5CB;   
-webkit-transform:scale(2);   
}   
/* Checkboxes */   
input[type=checkbox] {   
position: absolute;   
top: -9999px;   
left: -9999px;   
}   
label {   
text-shadow: 1px 1px 3px #000;   
}   
.to-back-label:hover,   
.to-lyrics-label:hover {   
color: #26C5CB;   
}   
label:active,   
label:focus {   
top: 0;   
opacity: 0;   
}   
label.to-back-label {   
position: absolute;   
top: 20px;   
left: 50%;   
width: 30px;   
height: 30px;   
margin-left: -15px;   
color: #fff;   
text-align: center;      
cursor: pointer;   
z-index: 500;   
}   
label.to-lyrics-label {   
position: absolute;   
top: 276px;   
left: 50%;   
width: 20px;   
height: 20px;   
margin-left: -5px;   
color: #fff;   
cursor: pointer;   
z-index: 500;   
}   
/* Flip Back */   
#player, #flip-back {   
backface-visibility: hidden;   
-webkit-backface-visibility: hidden;   
transition: transform .5s ease-in-out;   
-webkit-transition: -webkit-transform .5s ease-in-out;   
}   
#to-back:checked ~ #flip-back {   
z-index: 400;   
transform: rotateY(0deg);   
-webkit-transform: rotateY(0deg);   
}   
#to-back:checked ~ #player {   
z-index: -1;   
transform: rotateY(180deg);   
-webkit-transform: rotateY(180deg);   
}   
#to-back:checked ~ #progress {   
opacity: 0;   
transform: rotate(0);   
-webkit-transform: rotate(0);   
}   
#to-back:checked ~ #flip-back .playlist {   
transform: translateY(0);   
-webkit-transform: translateY(0);   
}   
/* Lyrics */   
.lyrics {   
position: relative;   
width: 100%;   
height: 96px;   
margin-top: 30px;   
padding: 4px 24px;   
color: #000;   
background: rgba(255,255,255,.3);   
font-size: 12px;   
text-align: center;   
overflow-y: scroll;   
box-shadow: inset 0 -3px 5px 0 rgba(0,0,0,.5);   
transition: all .5s ease-in-out;   
-webkit-transition: all .5s ease-in-out;   
}   
.lyrics:hover {   
background: rgba(255,255,255,.8);   
}   
.lyrics::-webkit-scrollbar {   
display: none;   
}   
.scroll {   
color: #fff;   
text-align: center;   
font-size: 9px;   
font-weight: bold;    
text-shadow: 1px 1px 3px #000;   
}   
.cover {   
padding-top: 130px;   
transition: all .5s ease-in-out;   
-webkit-transition: all .5s ease-in-out;   
}   
#to-lyrics:checked ~ .cover {   
padding-top: 40px;   
}   
#to-lyrics:checked ~ .cover .lyrics {   
margin-top: 0px;   
}   
#to-lyrics:checked ~ .cover button {   
margin: 4px;   
}   
/* Playlist */   
.playlist {   
margin-top: 20px;   
padding: 14px 20px;   
font-size: 12px;   
text-align: center;   
list-style: none;   
overflow-y: auto;   
z-index: 9999;   
transform: translateY(300px);   
-webkit-transform: translateY(300px);   
transition: transform .5s ease-in-out .3s;   
-webkit-transition: -webkit-transform .5s ease-in-out .3s;   
}   
.playlist h3 {   
color: #aeaeae;   
}   
.playlist li {   
display: block;   
padding: 4px 0;   
color: #AEAEAE;   
cursor: pointer;   
text-decoration: none;   
}   
.playlist li:hover {   
color: #26C5CB;   
}   
.playlist li:nth-child(1) {   
padding: 0 24px;   
}   
.playlist::-webkit-scrollbar {   
display: none;   
}   
/* Media Queries */   
@media all and (max-width: 768px) {   
#container, #player { width: 150px; height: 150px;}   
#progress { width: 160px; height: 160px; margin-top: -5px; margin-left: -5px; }   
label, .lyrics, .scroll { display: none; }   
.cover { padding-top: 46px; }   
button { margin: 4px; }   
button:first-of-type, button:last-of-type { display: none; }   
input[type='range'] { display: block; margin-top: -76px; height: 1px; }   
.info { margin-top: 70px; }   
.song { font-size: 12px; }   
.author { font-size: 10px; }   
}  


原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10076.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论