马黑PHP整站系统

单标签音频播放器

位置: 首页 > 代码集锦[ 发布时间: 2023.8.21  作者: Admin  阅读: 191 ]

以下代码展示单一标签加其伪元素实现音频播放器的基本功能,有进度显示、音频时间信息和动态控制按钮——

<style>

/* 播放器id选择器 */
#mplayer {
	margin: 20px;
	width: 250px;
	height: 50px;
	text-align: justify;
	text-align-last: justify;
	font: normal 14px / 40px sans-serif;
	color: #4d87d0;
	pointer-events: none;
	position: relative;
	--prg: 0%;
}

/* 伪元素公共属性 */
#mplayer::before, #mplayer::after { position: absolute; content: ''; cursor: pointer; pointer-events: auto; }

/* 伪元素 ::before 做进度条 */
#mplayer::before {
	width: 100%;
	height: 30%;
	bottom: 0;
	background: radial-gradient(circle at calc(var(--prg) + 4px) 50%, #1d5cb6 4px, transparent 5px, transparent),
		linear-gradient(to right, #4d87d0, #00ff00, #4d87d0 var(--prg), #aed8e6 0) no-repeat 0 50% / 100% 2px;
}

/* 伪元素 ::after 做按钮 */
#mplayer::after {
	width: 30px;
	height: 30px;
	left: calc(50% - 15px);
	top: 6px;
	clip-path: var(--clip);
	transition: all .35s;
	background: #1d5cb6;
}

/* 按钮鼠标滑过 */
#mplayer:hover::after { background: #ff0000; }

/* class选择器 :播放按钮 */
.play { --clip: polygon(20% 20%,20% 80%,80% 50%); display: var(--play); }

/* class选择器 :暂停按钮 */
.pause { --clip: polygon(20% 20%,20% 80%,40% 80%,40% 20%,80% 20%,80% 80%,60% 80%,60% 20%); }

</style>

<div id="mplayer" class="play"></div>
<audio id="aud" src="https:xg/xg/music.163.com/song/media/outer/url?id=2062919073" autoplay loop></audio>

<script>

//函数 :秒 → 分:秒
let toMin = (val) => {
	if (!val) return '00:00';
	let min = parseInt(val / 60), sec = parseFloat(Math.floor(val) % 60);
	if(sec < 10) sec = '0' + sec;
	return min + ':' + sec;
};

// 函数 :根据播放/暂停状态控制按钮样式
let mState = () => mplayer.className = aud.paused ? 'play' : 'pause';

// 鼠标指针移动显示 tiptop 信息
mplayer.onmousemove = (e) => {
	mplayer.title = e.offsetY < 0.7 * mplayer.offsetHeight ? '播放/暂停' : '调节进度';
}

// 单击事件 :播放/暂停或调节进度
mplayer.onclick = (e) => {
	if(e.offsetY > 0.7 * mplayer.offsetHeight) {
		aud.currentTime = e.offsetX * aud.duration / (mplayer.offsetWidth - 5);
	}else{
		aud.paused ? aud.play() : aud.pause();
	}
}

// 监听播放进度 :更新进度条
aud.addEventListener('timeupdate', ()=> {
	mplayer.style.setProperty('--prg', aud.currentTime / (aud.duration + 10) * 100 + '%');
	mplayer.innerText = toMin(aud.currentTime) + ' ' + toMin(aud.duration);
});

// 监听暂停事件
aud.addEventListener('pause', () => mState());

//监听播放事件
aud.addEventListener('play', () => mState());

</script>

前一篇: 苏小明 - 军港之夜
下一篇: CSS关键帧动画驱动的时钟

发表评论:

       

评论列表 [0条]

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