|
|

楼主 |
发表于 2022-12-24 09:00
|
显示全部楼层
帖子代码
- <style>
- #papa { margin: 0 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: olive linear-gradient(to top left, hsla(130,50%,50%,.6), hsla(210,100%,40%,.45)); box-shadow: 3px 3px 20px #000; position: relative; z-index: 1; }
- </style>
- <div id="papa"></div>
- <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2007028330.mp3" autoplay loop></audio>
- <script>
- (function() {
- //插件代码
- (function(mkPlayer) {let defaults = {lrcAr: [[2.6,"花潮LRC在线",3]],lrc_css: 'top: 15px; left: 50%; transform: translate(-50%)',player_css: 'bottom: 15px; left: 50%; transform: translate(-50%)',playerCode: `<style>#mplayer { --ww: 360px; --hh: 120px; --bg: linear-gradient(to top,lightgreen,green,lightgreen); --state: paused; --zx: 0.6; margin: auto; position: absolute; width: var(--ww); height: var(--hh); display: flex; justify-content: center; align-items: flex-end; cursor: pointer; z-indez: 901; }.mLine { position: relative; margin: 0 1px 0 1px; width: 4px; height: 10px; background: var(--bg); transition: height .45s; }.mLine::before, .mLine::after { position: absolute; content: ''; width: 100%; height: 4px; background: var(--ballcolor); top: 0; border-radius: 50%; transform: scale(1.5); animation: up .75s infinite; animation-play-state: var(--state); }#lrc { --motion: cover2; --tt: 1s; --state: running; --bg: linear-gradient(180deg,hsla(100,10%,50%,.75),hsla(100,100%,20%,.65)); position: absolute; font: bold 2.4em sans-serif; color: hsl(100, 100%, 90%); white-space: pre; -webkit-background-clip: text; filter: drop-shadow(1px 1px 2px hsla(0, 100%, 0%, .85)); z-index: 900; }#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); }@keyframes cover1 { from { width: 0; } to { width: 100%; } }@keyframes cover2 { from { width: 0; } to { width: 100%; } }@keyframes up { to { top: -15px;} }</style><div id="lrc" data-lrc="HCPlayer">HCPlayer</div><div id="mplayer" title="播放/暂停"></div>`,};let playCode = (user_config) => {let data = Object.assign({}, defaults, user_config);papa.innerHTML += data.playerCode;mplayer.style.cssText += data.player_css;lrc.style.cssText += data.lrc_css;let mKey = 0, mFlag = true;let getCssVal = (e,v) => getComputedStyle(e).getPropertyValue(v);let total = Math.ceil(mplayer.offsetWidth / 6), zx = getCssVal(mplayer,'--zx').replace(/[^\d\.]/ig,'') || 0.25;if(zx > 4) zx = 4;let mid = total % 2 === 0 ? total / 2 - 1 : Math.floor(total / 2);for(j=0; j<total; j++) {let k = j <= mid ? (mid - j) * 2 : (j - mid) * 2 - 1;let el = document.createElement('span');el.className = 'mLine';el.style.cssText = `bottom: ${k*zx}px;background: linear-gradient(#${Math.random().toString(16).substr(-6)},#${Math.random().toString(16).substr(-6)});--ballcolor: linear-gradient(135deg,#${Math.random().toString(16).substr(-6)},#${Math.random().toString(16).substr(-6)});`;mplayer.appendChild(el);}let lines = document.querySelectorAll('.mLine');function update() {lines.forEach((item,key) => item.style.height = Math.floor(Math.random() * (mplayer.offsetHeight - 20))+'px');}aud.addEventListener('timeupdate', () => {update();for (j = 0; j < data.lrcAr.length; j++) {if (aud.currentTime >= data.lrcAr[j][0]) {if (mKey === j) showLrc(data.lrcAr[j][2]);else continue;}}});aud.addEventListener('pause', () => mState());aud.addEventListener('play', () => mState());aud.addEventListener('seeked', () => calcKey());let mState = () => aud.paused ? (lrc.style.setProperty('--state', 'paused'), mplayer.style.setProperty('--state', 'paused')) : (lrc.style.setProperty('--state', 'running'),mplayer.style.setProperty('--state', 'running'));let showLrc = (time) => {let name = mFlag ? 'cover1' : 'cover2';lrc.innerHTML = data.lrcAr[mKey][1];lrc.dataset.lrc = data.lrcAr[mKey][1].replace(/<br>/, '\n');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 < data.lrcAr.length; j++) {if (aud.currentTime <= data.lrcAr[j][0]) {mKey = j - 1;break;}}if (mKey < 0) mKey = 0;if (mKey > data.lrcAr.length - 1) mKey = data.lrcAr.length - 1;let time = data.lrcAr[mKey][2] - (aud.currentTime - data.lrcAr[mKey][0]);showLrc(time);};mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();};mkPlayer.HCPlayer = playCode;})(this);
- //歌词数组
- let ar = [
- [2.4,"花潮LRC在线",3],
- [6,"折线频谱测试",5]
- ];
- //参数配置
- HCPlayer({
- lrcAr: ar,
- lrc_css: ' --bg: gold; color: snow; left: 20px; top: 15px;',
- player_css: '--ww: 260px; --hh: 100px; --zx: 2; bottom: 10px; left: calc(50% - 130px);',
- });
- })();
- </script>
复制代码
|
|