|
|

楼主 |
发表于 2023-7-19 06:52
|
显示全部楼层
本帖最后由 马黑黑 于 2023-7-19 07:01 编辑
代码分享
<style>
#mydiv { margin: -80px 0 0 calc(50% - 681px); width: 1200px; height: 800px; background: #333 url('https://638183.freep.cn/638183/t23/2/tukh.jpg'); box-shadow: 0 0 8px #000; overflow: hidden; z-index: 1; display: grid; place-items: center; position: relative; --state: paused; }
#mydiv::before { position: absolute; content: '\1F33F'; left: 495px; top: 240px; font-size: 30px; }
#ppwrap { position: absolute; bottom: 60px; width: 80px; height: 80px; cursor: pointer; animation: rot 6s infinite linear var(--state); --deg: 360deg; }
#ppwrap::before { display: grid; place-items: center; position: absolute; content: attr(data-tt); width: 100%; height: 100%; white-space: pre; font: normal 14px sans-serif; color: lightgreen; animation: rot 6s infinite linear var(--state); --deg: -360deg; }
#lrc { position: absolute; top: 20px; left: 50%; transform: translate(-50%); font: bold 2.4em sans-serif; color: rgba(140,220,125,.85); -webkit-background-clip: text; filter: drop-shadow(1px 1px 2px rgba(0,0,0,.95)); --motion: cover2; --tt: 5s; }
#lrc::before { position: absolute; content: attr(data-lrc); width: 20%; height: 100%; color: transparent; overflow: hidden; white-space: nowrap; background: linear-gradient(180deg,rgba(10,145,18,.35),rgba(20,175,50,.75)); filter: inherit; -webkit-background-clip: text; animation: var(--motion) var(--tt) linear forwards var(--state); }
.pinpu { display: grid; place-items: center end; position: absolute; right: calc(50% + 2px); top: calc(50% - 2px); width: 10px; height: 4px; transform-origin: 100% 100%; animation: ppgo var(--du) var(--dl) infinite alternate var(--state); }
.pinpu::after { content:''; position: absolute; width: 4px; height: 4px; background: lightblue; border-radius: 50%; }
.mybox { position: absolute; top: -100px; left: 50%; font-size: 50px; animation: down 8s var(--delay) infinite linear var(--state); --delay: 0s; --deg: 20deg; }
.mybox:nth-of-type(2) { --delay: -2s; --deg: -10deg; }
.mybox:nth-of-type(3) { --delay: -4s; --deg: -20deg; }
.mybox:nth-of-type(4) { --delay: -6s; --deg: 20deg; }
@keyframes ppgo { from { width: 0px; } to { width: 50px; } }
@keyframes rot { to { transform: rotate(var(--deg)); } }
@keyframes down { to { transform: rotate(var(--deg)) translateY(900px) rotate(360deg); } }
@keyframes cover1 { from { width: 0; } to { width: 100%; } }
@keyframes cover2 { from { width: 0; } to { width: 100%; } }
</style>
<div id="mydiv">
<div id="ppwrap" data-tt="00:00 00:00"></div>
<div id="lrc" data-lrc="花潮lrc在线">花潮lrc在线</div>
<span class="mybox">🍃</span>
<span class="mybox">🍂</span>
<span class="mybox">☘️</span>
<span class="mybox">🍁</span>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1958040909" autoplay loop></audio>
<script>
(function(){
let ppnum = 50, mKey = 0, mFlag = true, slip = 0;
let lrcAr = [ [3,"莫非定律乐团 - 天生狂花",38.0], [41.02,"随着一声枪响",3.0], [44.07,"又添新的伤疤",3.4], [49.03,"有些困倦嘶哑",3.0], [52.05,"是她正式登场",3.4], [56.06,"她身在最繁华的大街",4.4], [61.02,"她的心却在荒野",3.8], [65.01,"她绝不妥协也从不纠结",3.0], [68.01,"只要一个眼神",1.8], [70.08,"欢迎来她的世界",4.0], [74.08,"(放手一跃)",1.9], [76,"谁让她天生爱上危险的花",4.1], [80.09,"不卑不亢不慌不忙多潇洒",4.0], [84.04,"让她天生爱上自由表达",4.0], [88.08,"管他什么风吹还是雨打",3.9], [92.01,"看不见的虚假",2.0], [94.01,"张不开嘴吧",2.0], [96.03,"是谁明白却装傻",3.5], [100.01,"让一切都倒塌",2.0], [102.01,"让他们惊讶",2.0], [104.03,"没有人再见过她",4.0], [108.08,"(稀里哗啦)",2.4], [129.03,"落日飞沙之下",3.3], [133.1," They call you my sweet love",2.3], [137.03,"晚霞染红指甲",3.0], [140.06,"最火热的情话",3.5], [144.06,"若有谁迷恋疯狂世界",4.1], [149,"请哼着 whistle音乐",3.5], [153.01,"她不会回应但也不拒绝",3.0], [156.01,"哪有一颗真心",1.8], [158.07,"谁又知道会不会",5.0], [163.03,"(再次沦陷)",1.0], [164.01,"谁让她天生爱上危险的花",4.1], [168.09,"不知不觉不痛不痒多优雅",3.9], [172.04,"让她天生爱上自由表达",4.0], [176.08,"管他在那海角还是天涯",3.9], [180.01,"一般黑的乌鸦",2.0], [182.01,"一样的廉价",2.0], [184.03,"却仍在自卖自夸",3.9], [188.01,"再加一些筹码",2.0], [190.01,"再讲个笑话",2.0], [192.03,"只是别想拥有她",2.1], [194.09,"“嘻嘻哈哈”",3.9], [214.03,"谁让她天生爱上危险的花",4.2], [219.01,"不卑不亢不慌不忙多潇洒",3.0], [222.05,"让她天生爱上自由表达",4.4], [227,"管他什么风吹还是雨打",3.0], [230.03,"看不见的虚假",2.0], [232.03,"张不开嘴吧",2.0], [234.04,"是谁明白却装傻",4.0], [238.03,"让一切都倒塌",2.0], [240.02,"让他们惊讶",2.0], [242.05,"没有人再见过她",5.1] ];
!function(){ Array.from({length: ppnum}).forEach((item,key) => { item = document.createElement('span'); item.className = 'pinpu'; item.style.cssText += `background: lightgreen; transform: rotate(${360 / ppnum * key}deg) translate(-40px); --du: ${.2 + Math.random() * .2}s; --dl: -${Math.random()}s; `; ppwrap.appendChild(item); }); }();
let mState = () => mydiv.style.setProperty('--state', aud.paused ? 'paused' : 'running');
let toMin = (val) => {if (!val) return '00:00';val = Math.floor(val);let min = parseInt(val / 60), sec = parseFloat(val % 60);if(min < 10) min = '0' + min;if(sec < 10) sec = '0' + sec;return min + ':' + sec;}
let showLrc = (time) => {let name = mFlag ? 'cover1' : 'cover2';lrc.innerHTML = 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);};
aud.addEventListener('pause', mState, false);
aud.addEventListener('play', mState, false);
aud.addEventListener('seeked', calcKey, false);
aud.addEventListener('timeupdate', () => { ppwrap.dataset.tt = toMin(aud.currentTime) + '\n' + toMin(aud.duration); for (j = 0; j < lrcAr.length; j++) { if(aud.currentTime >= lrcAr[j][0] + slip) { cKey = j; if (mKey === j) showLrc(lrcAr[j][2]); else continue; } } });
ppwrap.onclick = () => aud.paused ? aud.play() : aud.pause();
})();
</script>
|
|