|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码:- <style>
- .mama { position: relative; margin: auto; width: 1000px; height: 600px; background: transparent linear-gradient(to right bottom, darkgreen, snow); box-shadow: 2px 2px 2px #444; }
- .lrcWrap { position: absolute; top: 10px; left: 10px; padding: 20px; width: fit-content; height: fit-content; text-align: center; background: transparent linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.15)); box-shadow: 2px 2px 4px #eee; display: flex; flex-direction: column;align-items: center; }
- .meterWrap { position: relative; display: flex; align-items: center; width: fit-content; height: 50px; }
- .btn { width: 24px; height: 24px; background: olive; color: #ccc; border: none; font-size: 14px; outline: none; cursor: pointer; }
- .btn:hover { color: red; }
- .meter { position: relative; width:300px; height: 11px; cursor: pointer; background: linear-gradient(transparent 5px, snow 6px,transparent 0); }
- .slider { display: block; position: absolute; width: 4px; height: 100%; background: olive; }
- .lrcWrap p { margin: 0 0 12px 0; padding: 0px; color: #ccc; font: normal 1.2em sans-serif; text-shadow: 1px 1px 1px #333; }
- .lrcBox { margin: 0; padding: 0; width: 400px; height: 72px; overflow: hidden; user-select: none; position: relative; }
- .lrcUl { position: relative; top: 0; margin: 0; padding: 0; }
- .lrcUl li { margin: 0; padding: 0; height: 24px; font: normal 18px / 24px sans-serif; color: gray; text-shadow: 1px 1px 1px black; list-style-type: none; }
- </style>
- <div class="mama">
- <div class="lrcWrap">
- <p>Audio Player for HTML5</p>
- <div class="lrcBox"><ul class="lrcUl"></ul></div>
- <div class="meterWrap">
- <input class="btn" type="button" value="||" />
- <div class="meter"><span class="slider"></span></div>
- </div>
- </div>
- </div>
- <audio class="aud" src="音频地址" autoplay="autoplay" loop="loop"></audio>
- <script>
- let aud = document.querySelector('.aud'),
- btn = document.querySelector('.btn');
- meter = document.querySelector('.meter'),
- slider = document.querySelector('.slider'),
- lrcUl = document.querySelector('.lrcUl');
- let slip = 0; //误差修正
- let lrcAr = [
- ['0.00','第一句'],
- ['3.84','第二句'],
- //...第N句
- ['331.05','最后一句']
- ];
- for(j=0; j<lrcAr.length; j++){
- lrcUl.innerHTML += '<li id="li' + lrcAr[j][0] + '" style="list-style-type: none">' + lrcAr[j][1] + '</li>';
- }
- aud.addEventListener('timeupdate', () => {
- let prog = (meter.clientWidth - slider.clientWidth) * aud.currentTime / aud.duration;
- slider.style.transform = 'translate(' + prog + 'px)';
- let tt = aud.currentTime;
- for(j=0; j<lrcAr.length; j++){
- if(tt >= lrcAr[j][0] - slip){
- if(j > 0){
- let idxLast = lrcAr[j-1][0];
- document.getElementById('li' + idxLast).style.color = 'gray';
- lrcUl.style.top = '-' + (j * 24 - 24) + 'px';
- }
- let idx = lrcAr[j][0];
- document.getElementById('li' + idx).style.color = 'ghostwhite';
- }
- }
- })
- aud.addEventListener('ended', () => {
- document.getElementById("li" + lrcAr[lrcAr.length-1][0]).style.color = 'gray';
- lrcUl.style.top = 0;
- })
- aud.addEventListener('pause', () => btn.value = '\u25BA');
- aud.addEventListener('play',() => btn.value = '||');
- meter.onclick = (e) => {
- e = e || event;
- aud.currentTime = (e.clientX - offset(meter,"left")) * aud.duration / meter.clientWidth;
- }
- btn.onclick = () => aud.paused ? (aud.play(),btn.value = '||') : (aud.pause(),btn.value = '\u25BA');
- btn.value = aud.paused ? '\u25BA' : '||';
- let offset = (obj,direction) => {//位移量
- let offsetDir = "offset" + direction[0].toUpperCase() + direction.substring(1);
- let realNum = obj[offsetDir];
- let positionParent = obj.offsetParent;
- while(positionParent != null){
- realNum += positionParent[offsetDir];
- positionParent = positionParent.offsetParent;
- }
- return realNum;
- }
- </script>
复制代码
|
评分
-
| 参与人数 3 | 威望 +130 |
金钱 +260 |
经验 +130 |
收起
理由
|
加林森
| + 30 |
+ 60 |
+ 30 |
很给力! |
小辣椒
| + 50 |
+ 100 |
+ 50 |
赞一个! |
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|