马黑黑 发表于 2022-12-24 09:00

折线频谱封装测试帖

本帖最后由 马黑黑 于 2022-12-24 09:36 编辑 <br /><br /><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: [],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) {if (mKey === j) showLrc(data.lrcAr);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;lrc.dataset.lrc = data.lrcAr.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) {mKey = j - 1;break;}}if (mKey < 0) mKey = 0;if (mKey > data.lrcAr.length - 1) mKey = data.lrcAr.length - 1;let time = data.lrcAr - (aud.currentTime - data.lrcAr);showLrc(time);};mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();};mkPlayer.HCPlayer = playCode;})(this);
        //歌词数组
        let ar = [
                ,
               
        ];
        //参数配置
        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>

马黑黑 发表于 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: [],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) {if (mKey === j) showLrc(data.lrcAr);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;lrc.dataset.lrc = data.lrcAr.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) {mKey = j - 1;break;}}if (mKey < 0) mKey = 0;if (mKey > data.lrcAr.length - 1) mKey = data.lrcAr.length - 1;let time = data.lrcAr - (aud.currentTime - data.lrcAr);showLrc(time);};mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();};mkPlayer.HCPlayer = playCode;})(this);
        //歌词数组
        let ar = [
                ,
               
        ];
        //参数配置
        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>

马黑黑 发表于 2022-12-24 09:03

参数简单说明:

lrcAr 和 lrc_css 就不说了,讲讲 player_css 参数——

--ww: 频谱宽度;
--hh: 频谱高度
--zx: 折线系数(取值 0.x 至 4)

红影 发表于 2022-12-24 09:11

标题咋就折现了呢{:4_170:}

红影 发表于 2022-12-24 09:12

这个好,可以配合不同的背景图,展现奇妙的频谱效果了{:4_199:}

马黑黑 发表于 2022-12-24 09:36

红影 发表于 2022-12-24 09:12
这个好,可以配合不同的背景图,展现奇妙的频谱效果了

折线最大系数是4,需要改大一点的,可以改动插件代码

马黑黑 发表于 2022-12-24 09:37

红影 发表于 2022-12-24 09:11
标题咋就折现了呢

问你要钱的意思呗,想买一筐苹果去瞅瞅小辣椒{:4_170:}

红影 发表于 2022-12-24 10:56

马黑黑 发表于 2022-12-24 09:36
折线最大系数是4,需要改大一点的,可以改动插件代码

系数越大,尾巴翘得越高呗{:4_189:}

红影 发表于 2022-12-24 10:57

马黑黑 发表于 2022-12-24 09:37
问你要钱的意思呗,想买一筐苹果去瞅瞅小辣椒

她之前幻阳过,预演了一遍,应该能更好地应对了{:4_173:}

马黑黑 发表于 2022-12-24 11:17

红影 发表于 2022-12-24 10:57
她之前幻阳过,预演了一遍,应该能更好地应对了

身体差,得了的话会比别人痛苦

马黑黑 发表于 2022-12-24 11:18

红影 发表于 2022-12-24 10:56
系数越大,尾巴翘得越高呗

太大了估计也不好,我只测试到5

红影 发表于 2022-12-24 15:38

马黑黑 发表于 2022-12-24 11:17
身体差,得了的话会比别人痛苦

最难过可能就头几天,熬过去就好了。

红影 发表于 2022-12-24 15:38

马黑黑 发表于 2022-12-24 11:18
太大了估计也不好,我只测试到5

这个已经比你帖子里的那个翘得高了呢{:4_173:}

马黑黑 发表于 2022-12-24 17:06

红影 发表于 2022-12-24 15:38
这个已经比你帖子里的那个翘得高了呢

系数用到2了

马黑黑 发表于 2022-12-24 17:07

红影 发表于 2022-12-24 15:38
最难过可能就头几天,熬过去就好了。

差不多都是这样的吧。其实开头几天难受,主要是心里难受,真正机理上的难受是第三第四天

红影 发表于 2022-12-24 20:47

马黑黑 发表于 2022-12-24 17:06
系数用到2了

看到了,才用到2就这么高,数字再大的话,估计不太好看了。

红影 发表于 2022-12-24 20:48

马黑黑 发表于 2022-12-24 17:07
差不多都是这样的吧。其实开头几天难受,主要是心里难受,真正机理上的难受是第三第四天

每个人不一样的吧,我是头两天发低烧,后来就没什么了。

马黑黑 发表于 2022-12-24 20:49

红影 发表于 2022-12-24 20:48
每个人不一样的吧,我是头两天发低烧,后来就没什么了。

这是典型的幸运羊

马黑黑 发表于 2022-12-24 20:51

红影 发表于 2022-12-24 20:47
看到了,才用到2就这么高,数字再大的话,估计不太好看了。

可以试试的。实际上,系数与频谱的总长度还是有联系的

红影 发表于 2022-12-24 21:40

马黑黑 发表于 2022-12-24 20:49
这是典型的幸运羊

这个还是会别感冒难受点的。
页: [1] 2 3
查看完整版本: 折线频谱封装测试帖