|
<style>
#papa { margin: auto; width: 700px; height: 420px;background: gray url('https://pic.imgdb.cn/item/638c36c416f2c2beb14c9462.jpg')no-repeat center/cover; box-shadow: 3px 3px 20px #000; position: relative; }
</style>
<div id="papa">
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1375167424.mp3" autoplay loop></audio>
<script>
(function() {
(function(mkPlayer){let defaults = {player_css: 'bottom: 10px; left: calc(50% -50px);',playerCode: `<style>#mplayer { position: absolute; --track:hsla(100,30%,80%,.65); --prog: hsla(100,60%,40%,.55); }#btnwrap { display:block; fill: var(--track); opacity: .95; cursor: pointer; }#btnwrap:hover {opacity: 1; }#track { fill: none; stroke: var(--track); }#prog { fill: none;stroke: var(--prog); }</style><svg id="mplayer"width="100" height="100"><gid="circle_wrap" transform="rotate(-90, 50, 50)"style="cursor: pointer;"><circle id="track"cx="50" cy="50" r="40"stroke-width="10" /><circle id="prog"cx="50" cy="50" r="40"stroke-width="10" /></g><gid="btnwrap"><path id="btnplay" d="M 40 40,4060,60, 50 z"></path><path id="btnpause" d="M 4240,42 60,47 60,47 40,42 40 z M 50 40,50 60,55 60,55 40,50 40 z" style="display:none;"></path><path d="M 47 50,50 40,50 60,47 60 z"fill="transparent" /></g></svg>`,};let playCode =(user_config) => {let data = Object.assign({}, defaults,user_config);papa.innerHTML += data.playerCode;mplayer.style.cssText +=data.player_css;let cc = { x: 1 * track.getAttribute('cx'), y: 1 *track.getAttribute('cy'), len: track.getTotalLength(),};prog.style.strokeDasharray = prog.style.strokeDashoffset =cc.len;btnwrap.onclick = () => aud.paused ? aud.play() :aud.pause();circle_wrap.onclick = (e) => {let deg = Math.atan2(e.offsetY -cc.y, e.offsetX - cc.x) * 180 / Math.PI;deg += (e.offsetX < cc.x &&e.offsetY < cc.y) ? 450 : 90;aud.currentTime = aud.duration * deg /360;};aud.addEventListener('timeupdate', () => {prog.style.strokeDashoffset= cc.len - cc.len * aud.currentTime / aud.duration;});aud.addEventListener('pause',() => mState());aud.addEventListener('play', () =>mState());aud.addEventListener('seeked', () => aud.play());let mState = ()=> aud.paused ? (btnplay.style.display = 'block', btnpause.style.display ='none') : (btnplay.style.display = 'none', btnpause.style.display ='block');};mkPlayer.HCPlayer = playCode;})(this);
HCPlayer({});
})();
</script>
|