亚伦影音工作室 发表于 2023-4-12 10:26

爱上你是一个错(DJ 桃子阿版-半吨兄弟

本帖最后由 亚伦影音工作室 于 2023-4-12 14:01 编辑 <br /><br /><style>
#papa {
      margin: 10px -300px;
      width: 1164px;
      height: 640px;
      background: lightblue url('https://img-baofun.zhhainiao.com/pcwallpaper_ugc/static/17fea824ea100ec91282e7bb25b9cada.jpg') center/cover no-repeat;
       border-width: 2px 3px 3px 2px;
      box-shadow: 0 0 20px #00ff00 inset;
      position: relative;
      z-index: 1;overflow: hidden;
}
#dt{position: absolute;top:-10%; left:0%;z-index: 1;
        width:800px;         
        height:300px;transform: rotateY(0deg);opacity: 0.8}

.donut { margin: -200px30px;
      --delay: 0s; --tt: 15s;
      position: absolute;
      width: 30px;
      height: 40px;
      border-radius: 50%;
      background: lightblue url('https://img-baofun.zhhainiao.com/pcwallpaper_ugc/static/ff17fabf0b4b48ae3a8e76448904914f.jpg') center/cover no-repeat;
       border-width: 2px 3px 3px 2px;
      box-shadow: 0 0 20px #00ff00 inset;
      opacity: .72;
      cursor: pointer;
      animation: rot var(--tt) var(--delay) infinite alternate linear var(--state);
}
@keyframes rot { 0% { transform:scale(1.8) rotate(2turn); top:180%;} }
</style>

<div id="papa">

<div id='dt'><img src="https://pic.imgdb.cn/item/641a8a2fa682492fcc039198.gif" width="100%" height="100%"></div>
<div data-lrc="亚伦影音工作室" id="lrc">亚伦影音工作室</div></div>
<audio id="aud" src="https://www.qqmc.com/mp3/music239331353.mp3" autoplay loop></audio>

<script>
let spans = [];
(function() {
      Array.from({length: 18}).forEach((item,key) => {
                let sp = document.createElement('span'), xx = Math.random()*40 + 30;
                sp.className = 'donut';
                sp.style.cssText += `
                        left: ${Math.random()*(papa.offsetWidth-180) + 30}px;
                        top: ${Math.random()*(papa.offsetHeight-180) + 30}px;
                        border-color: #${Math.random().toString(16).substr(-6)} #${Math.random().toString(16).substr(-6)} #${Math.random().toString(16).substr(-6)} #${Math.random().toString(16).substr(-6)};
                        width: ${xx}px;
                        height: ${xx}px;
                        --delay: ${Math.random()*key*.2}s;
                        --tt: ${Math.random()*key +6}s;
                `;
                papa.appendChild(sp);
                spans.push(sp);
      });
})();

let mState = () => papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');

spans.forEach((item) => item.onclick = () => aud.paused ? aud.play() : aud.pause());

aud.addEventListener('play', mState, false);
aud.addEventListener('pause', mState, false);

</script>
<style type="text/css">#lrc {
        --state: paused;
        --motion: cover2;
        --tt: 2s;
        --bg: linear-gradient(180deg, #880000, #880000);
        position: absolute;z-index: 4;
        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 = `爱上你是一个错(DJ 桃子阿版-半吨兄弟
词:陈国华
曲:陈国华
编曲:DJ 桃子阿
出品:昌禾文化
人生有许多难关要过
自古是情关最让人难受
也许我命中注定情海中颠簸
为你我付出这么的多
却让我痛到有苦不能说
因为我爱你就像那飞蛾扑向火
请你告诉我爱上你是一个错
别让我失魂落魄着了魔
解开我的迷惑
收起你的冷漠
你怎忍心这样做
请你告诉我爱上你是一个错
别让我漫漫长夜守寂寞
伤痛已经太多
心也早已伤透
我已不想再为谁去等候
人生有许多难关要过
自古是情关最让人难受
也许我命中注定情海中颠簸
为你我付出这么的多
却让我痛到有苦不能说
因为我爱你就像那飞蛾扑向火
请你告诉我爱上你是一个错
别让我失魂落魄着了魔
解开我的迷惑
收起你的冷漠
你怎忍心这样做
请你告诉我爱上你是一个错
别让我漫漫长夜守寂寞
伤痛已经太多
心也早已伤透
我已不想再为谁去等候
请你告诉我爱上你是一个错
别让我失魂落魄着了魔
解开我的迷惑
收起你的冷漠
你怎忍心这样做
请你告诉我爱上你是一个错
别让我漫漫长夜守寂寞
伤痛已经太多
心也早已伤透
我已不想再为谁去等候
`;

/*变量 :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); /*获得歌词数组*/
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
})();
</script>

<script>
let ctx = canv.getContext('2d');
let ww = canv.width =360, hh = canv.height =620;
let loop = () => {ctx.drawImage(vid, 0, 0, ww, hh);if(!vid.paused) {requestAnimationFrame(loop);return;}}

let mState = () => aud.paused ? (papa.style.setProperty('--state', 'paused'),vid.pause()) : (papa.style.setProperty('--state', 'running'),vid.play());
vid.playbackRate = 0.5;
vid.addEventListener('play', loop, false);
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());

</script>


红影 发表于 2023-4-12 10:32

制作好美啊。这个没有暂停按钮么?

红影 发表于 2023-4-12 10:35

哦哦,看到了,那些绿色的泡泡就是。评分后刷新了才行{:4_173:}

红影 发表于 2023-4-12 10:36

好多泡泡都是可以点击的,这个真神奇{:4_199:}

亚伦影音工作室 发表于 2023-4-12 10:37

红影 发表于 2023-4-12 10:32
制作好美啊。这个没有暂停按钮么?

这是黑老师的动画,点击任意一个圆圈可暂停!

亚伦影音工作室 发表于 2023-4-12 10:55

本帖最后由 亚伦影音工作室 于 2023-4-12 10:57 编辑 <br /><br />不说

红影 发表于 2023-4-12 21:59

亚伦影音工作室 发表于 2023-4-12 10:37
这是黑老师的动画,点击任意一个圆圈可暂停!

嗯嗯,后来发现了{:4_173:}
页: [1]
查看完整版本: 爱上你是一个错(DJ 桃子阿版-半吨兄弟