|
|

楼主 |
发表于 2023-3-15 07:49
|
显示全部楼层
本帖最后由 马黑黑 于 2023-3-15 08:08 编辑
帖子代码:
- <style>
- #papa {
- --state: paused;
- margin: -80px 0 0 calc(50% - 593px);
- width: 1024px;
- height: 640px;
- background: lightgreen url('https://638183.freep.cn/638183/t23/webp/panda.webp') center/cover no-repeat;
- box-shadow: 3px 3px 20px #000;
- display: grid;
- place-items: center;
- position: relative;
- }
- #lrc {
- --motion: cover2;
- --tt: 2s;
- --bg: linear-gradient(180deg, hsla(60, 50%, 50%, .45), hsla(80, 70%, 50%, .65));
- position: absolute;
- top: 20px;
- font: bold 2em sans-serif;
- color: snow;
- white-space: pre;
- -webkit-background-clip: text;
- filter: drop-shadow(1px 1px 2px hsla(0, 0%, 0%, .95));
- }
- #lrc::before {
- position: absolute;
- content: attr(data-lrc);
- width: 20%;
- height: 100%;
- color: transparent;
- overflow: hidden;
- white-space: pre;
- background: var(--bg);
- filter: inherit;
- -webkit-background-clip: text;
- animation: var(--motion) var(--tt) linear forwards;
- animation-play-state: var(--state);
- }
- #face {
- position: absolute;
- top: 80px;
- width: 100px;
- height: 100px;
- border: 1px solid #fff;
- border-radius: 100% 100% 80% 80%;
- cursor: pointer;
- }
- #face > span {
- position: absolute;
- top: 30px;
- width: 10px;
- height: 16px;
- border-radius: 50%;
- background: #000;
- }
- #face > span:nth-of-type(1) {
- left: 20px;
- animation: mov .5s infinite alternate var(--state);
- --xx: 10px;
- }
- #face > span:nth-of-type(2) {
- left: 70px;
- animation: mov .5s infinite linear alternate var(--state);
- --xx: -10px;
- }
- #face > span:nth-of-type(3) {
- height: 8px;
- background: none;
- border: 1px solid #000;
- top: 60px;
- left: 45px;
- transform: scale(.5);
- animation: scale .15s infinite alternate var(--state);
- }
- @keyframes cover1 { from { width: 0; } to { width: 100%; } }
- @keyframes cover2 { from { width: 0; } to { width: 100%; } }
- @keyframes mov {to { transform: translate(var(--xx)); } }
- @keyframes scale { to {transform: scale(1.5); } }
- </style>
- <div id="papa">
- <audio id="aud" src="https://music.163.com/song/media/outer/url?id=498880703.mp3" loop autoplay></audio>
- <div id="lrc" data-lrc="HCPlayer">HCPlayer</div>
- <div id="face">
- <span></span>
- <span></span>
- <span></span>
- </div>
- </div>
- <script>
- let averAdd = 0, offset = 0, mKey = 0, mFlag = true;
- let lrcTime = (ar) => {let tmpAr = [];for (j = 0; j < ar.length - 1; j++) {if (j !== ar.length - 1) tmpAr[j] = parseFloat((ar[j + 1][0] - ar[j][0]).toFixed(1));}let aver = parseInt(tmpAr.reduce((a, b) => a + b) / (tmpAr.length - 1)) + averAdd;tmpAr.push(aver);tmpAr.forEach((item, key) => {ar[key][2] = item > aver ? aver : item;});return ar;};
- let getLrcAr = (text) => {let lrcAr = [];let calcRule = [60, 1, 0.001];for (x of text.split('\n')) {let ar = [];let re = /\d+[\.:]\d+([\.:]\d+)?/g;let geci = x.replace(re, '');if (geci) {geci = geci.replace(/[\[\]\'"\t,]s?/g, '');let time = x.match(re);if (time != null) {for (y of time) {let tmp = y.match(/\d+/g);let sec = 0;for (z in tmp) sec += tmp[z] * calcRule[z];ar[0] = [parseFloat(sec.toFixed(2)) + offset, geci];lrcAr.push(ar[0]);}}}}lrcAr.sort((a, b) => a[0] - b[0]);return (lrcTime(lrcAr));}
- let showLrc = (time) => {let name = mFlag ? 'cover1' : 'cover2';lrc.innerHTML = lrcAr[mKey][1];lrc.dataset.lrc = lrcAr[mKey][1];lrc.style.setProperty('--motion', name);lrc.style.setProperty('--tt', time + 's');lrc.style.setProperty('--state', 'running');mKey += 1;mFlag = !mFlag;};
- let calcKey = () => { for (j = 0; j < lrcAr.length; j++) { if (aud.currentTime <= lrcAr[j][0]) { mKey = j - 1; break; } } if (mKey < 0) mKey = 0; if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1; let time = lrcAr[mKey][2] - (aud.currentTime - lrcAr[mKey][0]); showLrc(time); };
- let mState = () => papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
- let lrcAr = getLrcAr('[00:02.10]刘禹鑫 & 王梓濠 熊猫之歌\n[00:16.00]我有一副可爱身材\n[00:20.56]颜色经典只有黑白\n[00:24.72]我的胃口一向不坏\n[00:28.51]嚼着竹子欢乐开怀\n[00:31:60]熊猫之歌\n[00:32.72]有时我也想搞搞怪\n[00:36.71]拍张照片有点色彩\n[00:40.70]我的伙伴无处不在\n[00:44.61]好玩的游戏一起来\n[00:48.00]熊猫之歌\n[01:04.62]我有一副可爱身材\n[01:08.51]颜色经典只有黑白\n[01:12.58]我的胃口一向不坏\n[01:16.45]嚼着竹子欢乐开怀\n[01:20.65]有时我也想搞搞怪\n[01:24.53]拍张照片有点色彩\n[01:28.54]我的伙伴无处不在\n[01:32.53]好玩的游戏一起来\n[01:38.00]感谢支持');
- aud.addEventListener('timeupdate', () => {for (j = 0; j < lrcAr.length; j++) {if (aud.currentTime >= lrcAr[j][0]) {cKey = j;if (mKey === j) showLrc(lrcAr[j][2]);else continue;}}});
- aud.addEventListener('pause', () => mState());
- aud.addEventListener('play', () => mState());
- aud.addEventListener('seeked', () => calcKey());
- face.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
- </script>
复制代码
|
|