《守着一颗心等你》任妙音
<style>#papa {
margin: 120px -280px;
width: 1164px;
height: 640px;
box-shadow: 1px 1px 0px #000;
position: relative;
display: grid;
place-items: center;
z-index: 1;
}
#canv {
position: absolute;
display: block;
position: relative;
cursor: pointer;
z-index: 2;
}
#vid { display: none; }
#mypic {
width: 580px;
height: 380px;
position: absolute;
top: 20px;
right: 30px;
-webkit-mask-image: radial-gradient(black 25% ,transparent 65%);
cursor: pointer;
z-index: 3;
animation: rot 20s infinite alternate var(--state);
--state: paused;
}
@keyframes rot { 0%{ transform:scale(0); }}
.wenzi { position: absolute; left: 10px; top: 30px; z-index: 4; color: pink; font: bold 30px/30px 'FangSong',serif;opacity: .8; }
</style>
<div id="papa">
<canvas id="canv"></canvas>
<audio id="aud" src="https://www.joy127.com/url/104574.mp3" autoplay loop></audio>
<video id="vid" src="https://img-baofun.zhhainiao.com/pcwallpaper_ugc/preview/4221da2e515b439f93a40d723be0b381_preview.mp4" autoplay loop muted></video>
<img id="mypic" src="https://pic2.imgdb.cn/item/6455d9dc0d2dde57777b38c1.jpg?t=1679208327&key=f85e58058c13a7d43d88" alt="" />
<div class="wenzi">《守着一颗心等你》任妙音</div>
<div data-lrc="焱鑫磊博客" id="lrc">焱鑫磊博客</div>
</div>
<script>
let ctx = canv.getContext('2d');
let ww = canv.width = papa.offsetWidth, hh = canv.height = papa.offsetHeight;
let loop = () => {
ctx.drawImage(vid, 0, 0, ww, hh);
if(!vid.paused) {
requestAnimationFrame(loop);
return;
}
}
let mState = () => aud.paused ? (mypic.style.setProperty('--state', 'paused'), vid.pause()) : (mypic.style.setProperty('--state', 'running'), vid.play());
vid.addEventListener('play', loop, false);
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
mypic.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
</script>
<style type="text/css">#lrc {
--state: paused;
--motion: cover2;
--tt: 2s;
--bg: linear-gradient(180deg, #880000, #880000);
position: absolute;z-index: 3;
left: 50%;
transform: translate(-50%);
top: 85%;
font:normal 3em 华文隶书;
color: #000078;
white-space: pre;
-webkit-background-clip: text;
filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px0);
}
#lrc::before {
position: absolute;
content: attr(data-lrc);
width: 20%;
height: 100%;
color: transparent;
overflow: hidden;
white-space: pre;
background: var(--bg);
-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%; } }
</style>
<script >
(function() {
/*原始lrc歌词*/
let lrcStr = `
《守着一颗心等你》任妙音
词:何太极 童素心 曲:颂今
LRC歌词制作:焱鑫磊
我问你今晚有空吗
微笑的你突然开始沉默
你说你很忙
还有许多事要做
让我乖乖回家去
无聊了读本小说
我问你还会想我吗
你不假思索立即许下承诺
你说你想我比想自己还要多
为什么我不相信
感到深深的迷惑
也许这样想你是我唯一不改的执着
可是我却不敢让你知道我心中的脆弱
多少个夜晚我守着一颗心等你
可是却只能只能流着泪问自己
我是否应该等着你
还是轻轻把你放在心底
我问你还会想我吗
你不假思索立即许下承诺
你说你想我比想自己还要多
为什么我不相信 感到深深的迷惑
也许这样想你是我唯一不改的执着
可是我却不敢让你知道我心中的脆弱
多少个夜晚我守着一颗心等你
可是却只能只能流着泪问自己
我是否应该等着你
还是轻轻把你放在心底
可是却只能只能流着泪问自己
我是否应该等着你
还是轻轻把你放在心底
`;
/*变量 :mKey - 当前歌词索引;mFlag :调用关键帧动画索引;averAdd :平均值补偿*/
let mKey = 0, mFlag = true, averAdd = 0.3;
/*函数 :获取每句歌词用时,歌词用时若超过平均值则取平均值,最后一句歌词则取平均值*/
let lrcTime = (ar) => {
let tmpAr = [];
for(j = 0; j <ar.length - 1; j ++) {
if(j !== ar.length - 1) tmpAr = parseFloat((ar - ar).toFixed(1));
}
let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
tmpAr.push(aver);
tmpAr.forEach((item,key) => {
ar = item > aver ? aver : item;
});
return ar;
};
/*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
let getLrcAr = (text) => {
let lrcAr = [];
let calcRule = ;
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 * calcRule;
ar = ;
lrcAr.push(ar);
}
}
}
}
lrcAr.sort((a,b)=> a - b);
return(lrcTime(lrcAr));
};
/*函数 :模拟显示同步歌词*/
let showLrc = (time) => {
let name = mFlag ? 'cover1' : 'cover2';
lrc.innerHTML = lrcAr;
lrc.dataset.lrc = lrcAr;
lrc.style.setProperty('--motion', name);
lrc.style.setProperty('--tt', time + 's');
lrc.style.setProperty('--state', 'running');
mKey += 1;
mFlag = !mFlag;
};
/*函数 :处理当前歌词索引 mKey*/
let calcKey = () => {
for (j = 0; j < lrcAr.length; j++) {
if (aud.currentTime <= lrcAr) {
mKey = j - 1;
break;
}
}
if (mKey < 0) mKey = 0;
if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
let time = lrcAr - (aud.currentTime - lrcAr);
showLrc(time);
};
/*格式化时间信息*/
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 mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mplayer.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mplayer.style.animationPlayState = 'running');
/*监听播放进度*/
aud.addEventListener('timeupdate', () => {
for (j = 0; j < lrcAr.length; j++) {
if (aud.currentTime >= lrcAr) {
cKey = j;
if (mKey === j) showLrc(lrcAr);
else continue;
}
}
});
aud.addEventListener('pause', () => mState());/*监听暂停事件*/
aud.addEventListener('play', () => mState());/*监听播放事件*/
aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
})();
</script>
原来暂停是在那圆形图片上,暂停后所有动态都能停止的。欣赏焱鑫磊好帖{:4_187:} 很漂亮的帖,谢谢老师的分享!{:4_187:} 红影 发表于 2023-5-6 19:48
原来暂停是在那圆形图片上,暂停后所有动态都能停止的。欣赏焱鑫磊好帖
红影晚上好!{:4_187:} 梦缘 发表于 2023-5-6 20:19
很漂亮的帖,谢谢老师的分享!
梦缘晚上好!{:4_204:} 焱鑫磊 发表于 2023-5-6 20:42
红影晚上好!
制作很漂亮。再赏焱鑫磊好帖{:4_187:} 好多蒲公英在飞,那个图片还以为是抽烟,原来是耳机话筒。 竹溪 发表于 2023-5-6 21:31
好多蒲公英在飞,那个图片还以为是抽烟,原来是耳机话筒。
哈哈...任妙音不吸烟,会唱歌。{:4_187:} 焱鑫磊 发表于 2023-5-6 22:03
哈哈...任妙音不吸烟,会唱歌。
歌儿很好听,欣赏。
页:
[1]