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; } }
来自:http://blog.csdn.net/xmtblog/article/details/43700505
本文由用户 yg3n 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!