折线频谱封装测试帖
本帖最后由 马黑黑 于 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>
帖子代码
<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>
参数简单说明:
lrcAr 和 lrc_css 就不说了,讲讲 player_css 参数——
--ww: 频谱宽度;
--hh: 频谱高度
--zx: 折线系数(取值 0.x 至 4) 标题咋就折现了呢{:4_170:} 这个好,可以配合不同的背景图,展现奇妙的频谱效果了{:4_199:} 红影 发表于 2022-12-24 09:12
这个好,可以配合不同的背景图,展现奇妙的频谱效果了
折线最大系数是4,需要改大一点的,可以改动插件代码 红影 发表于 2022-12-24 09:11
标题咋就折现了呢
问你要钱的意思呗,想买一筐苹果去瞅瞅小辣椒{:4_170:} 马黑黑 发表于 2022-12-24 09:36
折线最大系数是4,需要改大一点的,可以改动插件代码
系数越大,尾巴翘得越高呗{:4_189:} 马黑黑 发表于 2022-12-24 09:37
问你要钱的意思呗,想买一筐苹果去瞅瞅小辣椒
她之前幻阳过,预演了一遍,应该能更好地应对了{:4_173:} 红影 发表于 2022-12-24 10:57
她之前幻阳过,预演了一遍,应该能更好地应对了
身体差,得了的话会比别人痛苦 红影 发表于 2022-12-24 10:56
系数越大,尾巴翘得越高呗
太大了估计也不好,我只测试到5 马黑黑 发表于 2022-12-24 11:17
身体差,得了的话会比别人痛苦
最难过可能就头几天,熬过去就好了。 马黑黑 发表于 2022-12-24 11:18
太大了估计也不好,我只测试到5
这个已经比你帖子里的那个翘得高了呢{:4_173:} 红影 发表于 2022-12-24 15:38
这个已经比你帖子里的那个翘得高了呢
系数用到2了 红影 发表于 2022-12-24 15:38
最难过可能就头几天,熬过去就好了。
差不多都是这样的吧。其实开头几天难受,主要是心里难受,真正机理上的难受是第三第四天 马黑黑 发表于 2022-12-24 17:06
系数用到2了
看到了,才用到2就这么高,数字再大的话,估计不太好看了。 马黑黑 发表于 2022-12-24 17:07
差不多都是这样的吧。其实开头几天难受,主要是心里难受,真正机理上的难受是第三第四天
每个人不一样的吧,我是头两天发低烧,后来就没什么了。 红影 发表于 2022-12-24 20:48
每个人不一样的吧,我是头两天发低烧,后来就没什么了。
这是典型的幸运羊 红影 发表于 2022-12-24 20:47
看到了,才用到2就这么高,数字再大的话,估计不太好看了。
可以试试的。实际上,系数与频谱的总长度还是有联系的 马黑黑 发表于 2022-12-24 20:49
这是典型的幸运羊
这个还是会别感冒难受点的。