手心里的温柔 - 刀郎
本帖最后由 亚伦影音工作室 于 2024-12-9 09:43 编辑 <br /><br /><style>#papa { margin: 10px -200px ; width: 960px; height: 520px;background:url(https://pic.imgdb.cn/item/6741e1fad29ded1a8c238f8b.png)no-repeat 560px 0px/400px 520px,url(https://file.moyublog.com/d/file/2024-04-22/a4443db09462cd14c02df4ff151bc7de.jpg)no-repeat 0px 0px/960px 520px; box-shadow: 0px 0px 0px 1px #000, 0px 0px 0px 6px #880000; position: relative; display: grid; place-items: center; z-index: 10000; overflow:hidden;--state: running;}
#cndpt{margin: 0px 0px ; opacity:1;
position: relative;width: 960px; height: 520px; mix-blend-mode: lighten;
background: url(https://pic.imgdb.cn/item/67564aedd0e0a243d4e015f5.gif)no-repeat center/cover; }
#enopg{
position: relative;width: 960px; height: 520px;
background: url(https://pic.imgdb.cn/item/67564af4d0e0a243d4e015f6.png) no-repeat center/cover;
display:none;
}
#mypic {top:60%; left:13%;z-index: 40;
display: block;position: absolute;
width: 110px; height: 160px;
background: url(https://pic.imgdb.cn/item/674fea38d0e0a243d4dd0c6e.png)no-repeat center/220px 160px;
animation: heart-burst steps(2) 2s infinite;
}
@keyframes heart-burst {
0% {background-position: 0px 0;}
100% {background-position: -220px 0;}
}
#but {width: 110px; height: 160px;}
#lrc {
--state: paused;
--motion: cover2;
--tt: 2s;
--bg: #880000;
position: absolute;z-index: 6;
left: 40%;
transform: translate(-50%);
top: 86%;
font:300 3em 华文新魏;
color: #000;
-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{0% { width: 0%;}100% { width: 100%;}}
@keyframes cover2 { 0% { width: 0%;}100% { width: 100%;}}
</style>
<div id="papa">
<div id="cndpt">
<div id="enopg"></div>
</div>
<div id="mypic">
<div id="but" onclick="pic()"></div>
</div>
<div data-lrc="" id="lrc"></div>
</div>
<audio id="aud" src="https://s2.ananas.chaoxing.com/sv-w9/audio/2c/87/32/ba6553bd63371ae2278151692c413526/audio.mp3" autoplay loop></audio>
<script >
function pic(){
varimgElement= document.getElementById('enopg');
if (imgElement.style.display === 'none' || imgElement.style.display === '') {
imgElement.style.display = 'block';
} else {
imgElement .style.display = 'none';
}
}
mypic.onclick = () => aud.paused ?(aud.play()):(aud.pause());
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
mypic.style.animationPlayState = aud.paused ? 'paused' : 'running';
aud.addEventListener('playing', () =>mypic.style.animationPlayState = 'running');
aud.addEventListener('pause', () =>mypic.style.animationPlayState = 'paused');
</script >
<script >
(function() {
/*原始lrc歌词*/
let lrcStr = `手心里的温柔 - 刀郎
词:刀郎
曲:刀郎
你在我身边相对无言
默默的许愿对爱的依恋
牧场的炊烟装点着草原
爱相拥着牧归的少年
你在我身边把我的手牵
牵着我手心不变的誓言
高高的雪山祝福我们
爱在这一刻永恒永远
爱到什么时候要爱到天长地久
两个相爱的人 一直到迟暮时候
我牵着你的手 我牵着你到白头
牵到地老天荒 看手心里的温柔
你在我身边把我的手牵
牵着我手心不变的誓言
高高的雪山祝福我们
爱在这一刻永恒永远
爱到什么时候要爱到天长地久
两个相爱的人 一直到迟暮时候
我牵着你的手 我牵着你到白头
牵到地老天荒 看手心里的温柔
爱到什么时候要爱到天长地久
两个相爱的人 一直到迟暮时候
我牵着你的手 我牵着你到白头
牵到地老天荒 看手心里的温柔
`;
/*变量 :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')) : (lrc.style.setProperty('--state','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:}{:5_116:} 看了今天的讲解才知道,这个不但有长图的运用,也有背景里动图的一键控制,很赞{:4_199:} 欣赏佳作,问候亚伦。
页:
[1]