毛玻璃+range可控进度+歌词同步帖子模板
<style>.papa { margin: 0 auto; width: 1024px; height: 640px; background: rgba(0,0,0,.4) url('图片地址'); position: relative; }
.papa input { border: none; outline: none; opacity: .75; cursor: pointer; }
.papa p { margin: 0; padding: 0; }
.playbox { position: relative; left: 10px; top: 10px; padding: 10px; width: fit-content; font: normal 1em sans-serif; color: snow; background: rgba(255,255,255,.25); backdrop-filter: blur(2px); border-radius: 8px; overflow: hidden; box-shadow: 1px 2px 2px #000; }
#btnplay { width: 30px; height: 30px; border-radius: 50%; }
#btnplay:hover { background: #aaa; color: #ff0000; }
</style>
<div class="papa">
<div class="playbox">
<p id="geci">LRC Loading ... </p>
<p style="display: flex; align-items: center; gap: 4px; margin-top: 10px;">
<input id="btnplay" type="button" value=">" />
<input id="slider" type="range" min="0" max="100" value="0" />
<span id="per">0:0 | 0:0</span>
</p>
</div>
<audio id="aud" src="音频地址" autoplay="autoplay" loop="loop"></audio>
</div>
<script>
let slider = document.querySelector('#slider'),
aud = document.querySelector('#aud'),
per = document.querySelector('#per'),
btnplay = document.querySelector('#btnplay'),
geci = document.querySelector('#geci');
let slip = 0; //误差值
let lrcAr = [
['0.06','歌词1'],
['0.51','歌词2'],
['218.85','歌词n'],
];
slider.onmousedown = () => aud.pause();
slider.onchange = () => { aud.currentTime = slider.value * aud.duration / 100; aud.play(); }
btnplay.onclick = () => aud.paused ? aud.play() : aud.pause();
aud.addEventListener('playing', () => btnplay.value = '||');
aud.addEventListener('pause', () => btnplay.value = '>');
aud.addEventListener('timeupdate', () => {
let prog = 100 * aud.currentTime / aud.duration;
slider.value = prog;
per.innerText = toMin(aud.currentTime) + ' | ' + toMin(aud.duration);
for(j=0; j<lrcAr.length; j++){
if(aud.currentTime >= lrcAr - slip){
geci.innerHTML = lrcAr;
}
}
});
let toMin = (sec) => {
if(!sec) return '0:00';
sec = parseInt(sec);
return parseInt(sec / 60) + ':' +parseFloat(sec % 60).toString().padStart(2,'0');
}
</script>
说明:
一、毛玻璃是用 backdrop-filter 做的,Firefox 不支持,IE不支持;
二、播放器显示进度的同时还显示当前播放时间和总时间,格式为 0:00;
三、range可用拖动方式调整播放进度;
四、歌词面板可以自动伸缩,再也不担心歌词显示不齐。播放器可以自由定位,比如放右下:
right: 20px;
bottom: 20px;
放左下:
left: 20px;
bottom: 20px;
放右上:
right: 20px;
top: 20px; 先围观{:4_174:} 马黑黑 发表于 2022-6-22 21:26
说明:
一、毛玻璃是用 backdrop-filter 做的,Firefox 不支持,IE不支持;
这个好。老黑辛苦啦! 这个有进度条,可以操作进度,毛玻璃的背景也很漂亮。黑黑真棒{:4_187:} 开始和暂停的播放按钮咋用符号了,我记得你专门做过那个按钮的{:4_173:} 红影 发表于 2022-6-23 09:47
开始和暂停的播放按钮咋用符号了,我记得你专门做过那个按钮的
这是为了简洁 马黑黑 发表于 2022-6-23 12:17
这是为了简洁
嗯嗯,也不错{:4_187:} 红影 发表于 2022-6-23 16:18
嗯嗯,也不错
这个是用标准字符,不会出现乱码等现象 马黑黑 发表于 2022-6-23 19:54
这个是用标准字符,不会出现乱码等现象
考虑很周全{:4_204:} 红影 发表于 2022-6-24 14:01
考虑很周全
被逼的 马黑黑 发表于 2022-6-24 19:13
被逼的
能实现功能就好{:4_204:} 红影 发表于 2022-6-24 21:07
能实现功能就好
对。变异的lrc,也需要能够解析 马黑黑 发表于 2022-6-24 21:08
对。变异的lrc,也需要能够解析
变异的可以不管,谁让它们变异呢{:4_173:} 红影 发表于 2022-6-24 22:19
变异的可以不管,谁让它们变异呢
这不符合编程的精神。一般来说,只要是可以的,我们就会去兼容,不可以再说(比如IE,兼容它太麻烦了,所以大家都抛弃它) 马黑黑 发表于 2022-6-24 22:24
这不符合编程的精神。一般来说,只要是可以的,我们就会去兼容,不可以再说(比如IE,兼容它太麻烦了,所 ...
海纳百川的精神,为程序编写者们点赞{:4_199:} 红影 发表于 2022-6-25 10:06
海纳百川的精神,为程序编写者们点赞
这是一种普遍的主张 马黑黑 发表于 2022-6-25 10:31
这是一种普遍的主张
这和别的专业不一样,别的专业都是能简单就简单{:4_173:} 红影 发表于 2022-6-25 20:14
这和别的专业不一样,别的专业都是能简单就简单
编程也力求简洁,但该有的要有,能支持的尽量支持 马黑黑 发表于 2022-6-25 20:32
编程也力求简洁,但该有的要有,能支持的尽量支持
嗯,也就是说考虑要复杂,语句要简单,是这样的吧。
页:
[1]
2