马黑PHP整站系统

集成快捷键的单曲播放器

位置: 首页 > 代码集锦[ 发布时间: 2025.2.21  作者: 马黑  阅读: 31 ]

效果

代码

<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 发布: 这个可以自定义图片啥的,更灵活

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com