命中注定(男女对唱版) TO:亚纶 & 老谟
<style>
#bj{position: relative;margin: 140px 0 20px calc(50% - 781px); width: 1400px;height:
792px;;overflow:hidden;background:url(https://wj.zp68.com/lxx/yunhua/2025/05/05/05.jpg)no-repeat center / cover;border-radius: 0px;box-shadow:0px 0px 0px 1px #fff,0px 0px 0px 6px #227700; --state:paused;}
#papa{position: absolute;width: 100%;height: 100%;MARGIN-LEFT:0px;margin-top:0px;background:url(https://wj.zp68.com/lxx/yunhua/2025/05/05/ku.jpg)no-repeat center / cover;}
#tu{position: absolute;top:5%; left:50%;
width: 100%;
height: 100%;animation: round 10s linear infinite var(--state); }
#tu img{width: 40%;-webkit-mask-image: radial-gradient(black 25% ,transparent 65%);transform: rotateY(180deg);
}
@keyframes round{
0% {
-webkit-transform:rotate(0deg)scale(3)translate(-100%,50%);
opacity:0}
30% {
-webkit-transform:rotate(0deg)scale(1)translate(-20%,0%);
opacity:1}
80% {
-webkit-transform:rotate(0deg)scale(1)translate(-20%,0%);
opacity:1}
100% {
-webkit-transform:rotate(0deg)scale(3)translate(-20%,-50%);
opacity:0}
}
#tuu{position: absolute;top:4%; left:10%;
width: 100%;
height: 100%;animation: roud 10s linear infinite var(--state); }
#tuu img{width: 40%;-webkit-mask-image: radial-gradient(black 25% ,transparent 65%);
}
@keyframes roud{
0% {
-webkit-transform:rotate(0)scale(3)translate(100%,-50%);
opacity:0}
30% {
-webkit-transform:rotate(0)scale(1)translate(40%,0%);
opacity:1}
80% {
-webkit-transform:rotate(0deg)scale(1)translate(40%,0%);
opacity:1}
100% {
-webkit-transform:rotate(0deg)scale(3)translate(100%,50%);
opacity:0}
}
#geci{--motion:cover2;--tt:2s;--state:paused;--bg:#880000;position:absolute;left: 50%; transform: translate(-50%);top: 70%;font:300 2.8em 华文隶书;color:#227700;white-space:pre;-webkit-background-clip:text;filter:drop-shadow(#fff 1px 0 0)drop-shadow(#fff 0 1px 0)drop-shadow(#fff -1px 0 0) drop-shadow(#fff 0 -1px0);z-index: 6;display: none;cursor: pointer;}
#geci::before{position: absolute;content: attr(data-geci);width: 100%; height: 100%;color: transparent;overflow: hidden;white-space: pre;background: var(--bg);clip-path: inset(0 100% 0 0);-webkit-background-clip: text;animation: var(--motion) var(--tt) linear forwards;animation-play-state: var(--state);}
@keyframes cover1{ to { clip-path: inset(0 0 0 0); } }@keyframes cover2 { to { clip-path: inset(0 0 0 0); } }
#mplayer { position: absolute; text-align: center; top: 95%;transform: translate(-50%); left: 50%;z-index: 60;color:#ffffff;}
.hide{display: none;}
#mplayer::before {position: absolute;content: attr(data-tt);left: 0;bottom: 25px;width: 100%;text-align-last: justify;}
#mprog { width: 400px;height: 2px; accent-color: darkgreen; outline: none; cursor: pointer; }
#btnplay {position: relative;width: 60px; height: 60px; cursor: pointer; animation: rotating 6s infinite linear var(--state);margin: -90px 0px;border-radius: 50px;box-shadow:0px 0px 0px 1px #fff,0px 0px 0px 4px #227700;}
@keyframes rotating { to { transform: rotate(360deg); } }
.playbtn, .pausebtn,#world,#zs,#bjqh{border-radius: 4px;position: relative;
color:#fff;background:#0000;box-shadow:0px 0px 0px 1px #fff;
padding: 4px 8px;
font-size: 12px;
border: none;
cursor: pointer;margin: 8px 5px;left: 66%;
}
</style>
<style>
#dhgc{position:absolute;width: 540px;
height: 450px;z-index: 6;
border: 0px solid white;cursor: pointer;
overflow: hidden;margin: 8% 10px;
}
.lrc {position:absolute;width: 100%;
height: 100%;
border: 0px solid white;
margin: 0px 0px;
}
.lrc #ul {width: 100%;
padding: 0;list-style: none;transition: 0.3s all ease;
margin: 0}
.lrc #ul li {
font:300 1.2em 微软雅黑;
color: #f7e309;
transition: .3s all ease;
list-style-type: none;
text-align: center;display: block;
width: 100%;
margin: 0 auto;
height: 50px;
line-height: 35px;
}
.lrc #ulli.active{ font:450 1.6em 微软雅黑;
color: #fff;
text-align: center; filter:drop-shadow(#000 1px 1px 0px);
}
</style>
<div id="bj">
<div id="papa"></div>
<div id="tu">
<img src="https://wj.zp68.com/lxx/yunhua/2025/05/05/n.png" alt="">
</div>
<div id="tuu">
<img src="https://wj.zp68.com/lxx/yunhua/2025/05/05/nan.png " alt="">
</div>
<div id="mplayer" data-tt="00:00 00:00" >
<img id="btnplay" src="https://xlaj.cn/upfile/2025/04/12/ann.png" title="播放/暂停" alt="" /><br>
<input id="mprog" type="range" min="0" max="50" step="any" value="0" title="调节进度" />
</div>
<audio id="audio" src="https://aod.cos.tx.xmcdn.com/storages/4f2a-audiofreehighqps/F7/80/GAqh4zIL5vy0ACAAAAOjU5uR.m4a" loop autoplay></audio>
<div id="geci"></div>
<div id="dhgc"><div class="lrc" >
<ul id="ul">
</ul>
</div>
</div>
<button class="playbtn"onclick="btn1()"title="klok歌词模式">klok歌词</button>
<button class="pausebtn" onclick="btn2()"title="多行歌词模式">多行歌词</button>
<button id="world" onclick="btn3()"title="播放器模式">播放器隐藏</button>
<button id="bjqh" onclick="btn4()"title="背景模式">背景TWO</button>
<buttonid="zs"onclick="btnClick()"title="屏展模式" >屏展模式</button>
<div id="全屏"></div><div id="退出" ></div>
</div>
<script>
let lrc = `命中注定(男女对唱版)
歌手:基地小虎&俞子欣
词Lyricist:刘悠然
曲Composer:王元华
混音Mixing Engineer:卢晓武
和声Backing Vocal:俞子欣
出品人Publisher:王婷婷
命中注定轮回中爱上你
生生不息痴痴缠绵意
茫茫人海里 一眼望见你
是缘是劫 我都认了命
转动经轮不为修来世
只为途中能与你相遇
纵使路崎岖 也不会舍弃
魂牵梦萦 只为找寻你
我放下天地 不曾有过放下你
为你倾尽所有的力气
踏过了荆棘走过了风雨
陪你一程我也愿意
我放下天地 不曾有过放下你
爱你的心无人可代替
永恒的眷恋 刻在灵魂里
生命有你才有了意义
LRC编辑:小辣椒
转动经轮不为修来世
只为途中能与你相遇
纵使路崎岖 也不会舍弃
魂牵梦萦 只为找寻你
我放下天地 不曾有过放下你
为你倾尽所有的力气
踏过了荆棘走过了风雨
陪你一程我也愿意
我放下天地 不曾有过放下你
爱你的心无人可代替
永恒的眷恋 刻在灵魂里
生命有你才有了意义
我放下天地 不曾有过放下你
为你倾尽所有的力气
踏过了荆棘走过了风雨
陪你一程我也愿意
我放下天地 不曾有过放下你
爱你的心无人可代替
永恒的眷恋 刻在灵魂里
生命有你才有了意义
谢谢欣赏
`;
audio.addEventListener("seeked", myFunction)
audio.addEventListener("timeupdate", mylrc);
let mKey = 0, mFlag = true;
function 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));
tmpAr.push(aver);
tmpAr.forEach((item,key) => {
ar = item > aver ? aver : item;
});
return ar;
};
function getLrcAr(str) {
str = str.trim();
let lines = [], lrcAr = [];
let reg = /\[(\d{1,}:\d{1,}.\d{1,})\](.*)/g;
if(!str.match(reg)) return;
lines = str.replace(reg,'$1-{}-$2').split('\n');
for(k = 0; k < lines.length; k ++) {
lrcAr = [];
for(j = 0; j < 3; j ++) {
let tmpAr = lines.split('-{}-');
lrcAr = j === 0 ? toSecs(tmpAr) : tmpAr;
}
}
return lrcTime(lrcAr);
};
function toSecs (lrcTime){
let reg = /\d{2,}/g;
let ar = lrcTime.match(reg);
return ar*60 + parseInt(ar) + parseInt((ar)/1000);
};
function showLrc(time){
let name = mFlag ? 'cover1' : 'cover2';
geci.innerHTML = lrcAr;
geci.dataset.geci = lrcAr;
geci.style.setProperty('--motion', name);
geci.style.setProperty('--tt', time + 's');
geci.style.setProperty('--state', 'running');
mKey += 1;
mFlag = !mFlag;
};
function myFunction(){
for (j = 0; j < lrcAr.length; j++) {
if (audio.currentTime <= lrcAr) {
mKey = j - 1;
break;
}
}
if (mKey < 0) mKey = 0;
if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
let time = lrcAr - (audio.currentTime - lrcAr);
showLrc(time);
};
function mylrc() {
for (j = 0; j < lrcAr.length; j++) {
if (audio.currentTime >= lrcAr) {
cKey = j;
if (mKey === j) showLrc(lrcAr);
else continue;
}
}
}
audio.addEventListener('play', playing,false);
audio.addEventListener('pause', playing,false);
function playing() {
geci.style.setProperty('--state', audio.paused ? 'paused' : 'running');
}
let lrcAr = getLrcAr(lrc);
</script>
<script>
var mseek = false;
var mState = () => audio.paused ?
( btnplay.style.setProperty('--state', 'paused'), bj.style.setProperty('--state', 'paused'),btnplay.title = '点击播放' ) :
( btnplay.style.setProperty('--state', 'running'),bj.style.setProperty('--state', 'running'),btnplay.title = '点击暂停' );
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;
}
audio.addEventListener('timeupdate', () => {
if (!mseek) mprog.value = audio.currentTime / audio.duration * mprog.max;
mplayer.dataset.tt = toMin(audio.currentTime) + ' ' + toMin(audio.duration);
});
audio.addEventListener('pause', () => mState());
audio.addEventListener('playing', () => mState());
mprog.onmousedown = () => mseek = true;
mprog.onmouseup = () => mseek = false;
mprog.onchange = () => audio.currentTime = audio.currentTime = mprog.value / mprog.max * audio.duration;
dhgc.onclick =geci.onclick =btnplay.onclick = () => audio.paused ? (audio.play()) : (audio.pause());
</script>
<script>
// 最开始获取到的歌词列表是字符串类型(不好操作)
let lrcArr = lrc.split('\n');
// 接收修正后的歌词数组
let result = [];
// 获取所要用到的dom列表
doms = {
audio: document.querySelector("#audio"),
ul: document.querySelector("#ul"),
container: document.querySelector(".lrc")
}
// 将歌词数组转成由对象组成的数组,对象有time和word两个属性(为了方便操作)
for (let i = 0; i < lrcArr.length; i++) {
var lrcData = lrcArr.split(']');
var lrcTime = lrcData.substring(1);
var obj = {
time: parseTime(lrcTime),
word: lrcData
}
result.push(obj);
}
// 将tiem转换为秒的形式
function parseTime(lrcTime) {
lrcTimeArr = lrcTime.split(":")
return +lrcTimeArr * 60 + +lrcTimeArr;
}
// 获取当前播放到的歌词的下标
function getIndex() {
let Time = doms.audio.currentTime;
for (let i = 0; i < result.length; i++) {
if (result.time > Time) {
return i - 1;
}
}
}
// 创建歌词列表
function createElements() {
let frag = document.createDocumentFragment(); // 文档片段
for (let i = 0; i < result.length; i++) {
let li = document.createElement("li");
li.innerText = result.word;
frag.appendChild(li);
}
doms.ul.appendChild(frag);
}
createElements();
// 获取显示窗口的可视高度
let containerHeight = doms.container.clientHeight;
// 获取歌词列表的可视高度
let liHeight = doms.ul.children.clientHeight;
// 设置最大最小偏移量,防止显示效果不佳
let minOffset = 0;
let maxOffset = doms.ul.clientHeight - containerHeight;
// 控制歌词滚动移动的函数
function setOffset() {
let index = getIndex();
// 计算滚动距离
let offset = liHeight * index - containerHeight / 2 + liHeight / 2;
if (offset < minOffset) {
offset = minOffset;
};
if (offset > maxOffset) {
offset = maxOffset;
};
// 滚动
doms.ul.style.transform = `translateY(-${offset}px)`;
// 清除之前的active
let li = doms.ul.querySelector(".active")
if (li) {
li.classList.remove("active");
}
// 为当前所唱到的歌词添加active
li = doms.ul.children;
if (li) {
li.classList.add("active");
}
};
// 当audio的播放时间更新时,触发该事件
doms.audio.addEventListener("timeupdate", setOffset);
</script>
<script>
function btn1() {
document.getElementById('geci').style.display = 'block';
document.getElementById('dhgc').style.display = 'none';
}
function btn2() {
document.getElementById('geci').style.display = 'none';
document.getElementById('dhgc').style.display = 'block';
}
function btn3(){
var img=document.getElementById("mplayer");
if(document.getElementById("world").innerHTML=="播放器隐藏"){
mplayer.className="hide";
document.getElementById("world").innerHTML="显示播放器";
}else{
mplayer.className="";
document.getElementById("world").innerHTML="播放器隐藏";
}
}
function btn4(){
var img=document.getElementById("papa");
if(document.getElementById("bjqh").innerHTML=="背景TWO"){
papa.className="hide";
document.getElementById("bjqh").innerHTML="背景ONE";
}else{
papa.className="";
document.getElementById("bjqh").innerHTML="背景TWO";
}
}
function btnClick() {
var zs= document.getElementById("zs");
if (this.isFullscreen()) {
全屏.style.opacity= '1'; 退出.style.opacity = '0';
zs.style.cursor="ne-resize";
exitFullScreen();
} else {
全屏.style.opacity= '0'; 退出.style.opacity = '1';
zs.style.cursor="se-resize";
zs.style.visibility='visible';
if (zs.requestFullscreen) {
bj.requestFullscreen();
} else if (zs.webkitRequestFullScreen) {
zs.webkitRequestFullScreen();
} else if (zs.mozRequestFullScreen) {
bj.mozRequestFullScreen();
} else if ( zs.msRequestFullscreen) {
zs.msRequestFullscreen();
}
}
}
// 退出全屏
function exitFullScreen() {
let exitFullScreen = document.exitFullScreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.msExitFullscreen;
if (exitFullScreen) {
exitFullScreen.call(document);
}
}
// 判断是否全屏
function isFullscreen() {
return document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
}
</script> @亚伦影音工作室
谢谢亚纶源码制作,小辣椒简单的用了一对人儿的图片效果,直接按老谟的代码套用了,谢谢二位一并致谢!@老谟深虑 越做越精致,总有新的他创意层出不穷!{:4_178:} 樵歌 发表于 2025-5-4 20:36
越做越精致,总有新的他创意层出不穷!
樵哥哥晚上好,这个是前几天答应做一个的,昨天晚上赶出来的,背景图片做的简单了一点了 祝老青年、小青年们节日快乐! 选材很好,制作精良! 梦油 发表于 2025-5-4 20:46
祝老青年、小青年们节日快乐!
梦油晚上好,今天五四青年节,是啊,老青年、小青年都要快乐!{:4_205:} 这个制作漂亮,有两个人儿的移动图,连两个背景上也有两个人的影子呢。这构思好{:4_199:} 这么功能的集合,觉得亚伦老师的这个代码特别好呢。
欣赏亲爱的精美制作{:4_199:} 很精美的制作,两个人分分合合,很有创意!{:4_187:} 精彩的制作,背景图片制作的真好,欣赏学习了!
小辣椒 发表于 2025-5-4 20:51
梦油晚上好,今天五四青年节,是啊,老青年、小青年都要快乐!
老青年越活越年轻。小青年越活越成熟。 亚伦影音工作室 发表于 2025-5-4 20:50
选材很好,制作精良!
谢谢亚纶精彩的源码分享{:4_187:} 红影 发表于 2025-5-4 21:04
这个制作漂亮,有两个人儿的移动图,连两个背景上也有两个人的影子呢。这构思好
亲爱的,只是偷懒,没有漂亮的图图就这样增加一点看点了 红影 发表于 2025-5-4 21:05
这么功能的集合,觉得亚伦老师的这个代码特别好呢。
欣赏亲爱的精美制作
最近发现亚纶几个播放器代码我都很喜欢的,只是没有时间玩就先做一个,以后再抽空做一些 梦江南 发表于 2025-5-5 08:35
很精美的制作,两个人分分合合,很有创意!
阿姨好,这个我是套用亚纶老师的代码 老谟深虑 发表于 2025-5-5 11:10
精彩的制作,背景图片制作的真好,欣赏学习了!
问好老谟,谢谢你的,套用了你用一对人儿的代码,我是想速度完成这个帖,纯一对人儿没有亚纶的效果好,我就加了图图背景人物,增加一点看点而已。 小辣椒 发表于 2025-5-5 14:11
亲爱的,只是偷懒,没有漂亮的图图就这样增加一点看点了
这个设计很棒的,特别温馨{:4_187:} 小辣椒 发表于 2025-5-5 14:12
最近发现亚纶几个播放器代码我都很喜欢的,只是没有时间玩就先做一个,以后再抽空做一些
是啊,效果很赞的,很出彩{:4_187:} 红影 发表于 2025-5-5 20:45
这个设计很棒的,特别温馨
这个比较方便,我求速度,就上去一对人儿,应该多对会效果比较好吧
页:
[1]
2