评论资讯 [ 总 458 则 ]
·小白 - 2025-2-22 16:02
·小希 - 2025-2-20 14:49
·悄然 - 2025-2-20 14:44
·飞飞 - 2025-2-20 14:43
·飞飞 - 2025-2-17 20:02
·飞飞 - 2025-2-17 19:59
·悄然 - 2025-2-17 19:55
·悄然 - 2025-2-17 19:53
·飞飞 - 2025-2-17 19:38
·知名不具 - 2025-2-17 13:02
·小希 - 2025-2-20 14:49
·悄然 - 2025-2-20 14:44
·飞飞 - 2025-2-20 14:43
·飞飞 - 2025-2-17 20:02
·飞飞 - 2025-2-17 19:59
·悄然 - 2025-2-17 19:55
·悄然 - 2025-2-17 19:53
·飞飞 - 2025-2-17 19:38
·知名不具 - 2025-2-17 13:02
友情链接
网站统计
集成快捷键的单曲播放器
效果
代码
<style> #mboard { width: 420px; height: 40px; background: beige; border-radius: 8px; box-shadow: 2px 2px 4px rgba(0,0,0,.5); display: flex; justify-content: center; align-items: center; gap: 8px; position: relative; } #mboard img { width: 26px; cursor: pointer; } #mboard img:hover { filter: drop-shadow(1px 1px 1px rgba(0,0,0,.5)); } #tMsg1, #tMsg2 { width: 45px; font-size: 13px; text-align: center; } #volwrap { position: absolute; width: 60px; height: 40px; right: 45px; display: grid; place-items: center; background: none; } #volwrap:hover #volume { display: inline; } #btnMute:hover ~ #volwrap > #volume { display: inline; } #volume { position: absolute; width: 50px; height: 4px; opacity: .75; display: none; } #prog { --track: gray; --prog: red; --prg: 0%; width: 200px; height: 20px; cursor: pointer; background: linear-gradient(to right, var(--prog) var(--prg), var(--track) 0) no-repeat 0% 50%/100% 2px; } </style> <div id="mboard"> <img id="btnPlay" src="https://638183.freep.cn/638183/web/icon/play.svg" title="播放/暂停(Alt+X)" alt="" /> <span id="tMsg1">00:00</span> <span id="prog"></span> <span id="tMsg2">00:00</span> <img id="btnMute" src="https://638183.freep.cn/638183/web/icon/unmuted.svg" title="静音 (Alt+J)" alt="" /> <div id="volwrap"><input id="volume" type="range" min="0" max="1" step="0.1" value="1" /></div> </div> <p><audio id="aud" src="https://music.163.com/song/media/outer/url?id=1321297488" autoplay loop></audio></p> <script> let lastVolume = 1, muted = false; const imgAr = [ 'https://638183.freep.cn/638183/web/icon/play.svg', 'https://638183.freep.cn/638183/web/icon/pause.svg', 'https://638183.freep.cn/638183/web/icon/unmuted.svg', 'https://638183.freep.cn/638183/web/icon/muted.svg', ]; const setVolume = (val) => Math.min(1, Math.max(0, val)); const setMute = () => { if(lastVolume === 0) return; muted = !muted; muted ? (aud.volume = 0, btnMute.src = imgAr[3]) : (aud.volume = lastVolume, btnMute.src = imgAr[2]); }; const s2m = (seconds) => { const secs = Math.floor(seconds || 0); return `${String(secs/60|0).padStart(2,'0')}:${String(secs%60).padStart(2,'0')}`; }; const mState = () => { btnPlay.src = aud.paused ? imgAr[0] : imgAr[1]; btnPlay.title = (aud.paused ? '播放' : '暂停') + ' (Alt+X)'; }; document.addEventListener('keydown', e => { if(!e.altKey) return; switch (e.keyCode) { case 88: btnPlay.click(); break; case 74: setMute(); break; case 187: case 107: aud.volume = setVolume(aud.volume + 0.1); lastVolume = aud.volume; break; case 189: case 109: aud.volume = setVolume(aud.volume - 0.1); lastVolume = aud.volume; break; default: return; } }); aud.onplaying = aud.onpause = () => mState(); aud.ontimeupdate = () => { prog.style.setProperty('--prg', aud.currentTime/aud.duration*100 +'%'); tMsg1.innerText = s2m(aud.currentTime); tMsg2.innerText = s2m(aud.duration); }; aud.onvolumechange = () => { btnMute.src = aud.volume === 0 ? imgAr[3] : imgAr[2]; volume.value = aud.volume; } btnPlay.onclick = () => aud.paused ? aud.play() : aud.pause(); btnMute.onclick = () => setMute(); volume.onchange = () => aud.volume = lastVolume = volume.value; prog.onclick = (e) => aud.currentTime = e.offsetX * aud.duration / prog.offsetWidth; prog.onmousemove = (e) => prog.title = s2m(e.offsetX * aud.duration / prog.offsetWidth); volwrap.onmousemove = () => volwrap.title = '音量 : ' + volume.value + ' (Alt++/-)' </script>
前一篇: 利用scrollToView实现图片翻页功能
下一篇: 没有了
发表评论:
评论列表 [1条]
#1 | 小白 于 2025-2-22 16:02 发布: 这个可以自定义图片啥的,更灵活