醉美水芙蓉 发表于 2023-5-13 20:09

祝论坛朋友母亲节快乐《我养的人和养我的人 (对唱版)》

<style>
#papa {
        margin: 80px -260px;
        width: 1124px;
        height: 620px;
        background: url('https://pic2.imgdb.cn/item/645f78e20d2dde5777fb4a35.jpg') no-repeat center/cover;
        box-shadow: 0 0 0px #000;
        position: relative;
        z-index: 1;overflow:hidden;
        --state: paused;
}
css-doodle { position: absolute; }

#lrc {
        --state: paused;
        --motion: cover2;
        --tt: 2s;
        --bg: linear-gradient(180deg, #880000, #ff0000, #80ef03);
        position: absolute;z-index: 4;
        left: 50%;
        transform: translate(-50%);
        top: 90%;
        font:normal 3em 华文行楷;
        color: #055306;
        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>

<div id="papa">
       <div id="lrc" data-lrc="花潮lrc在线">花潮lrc在线</div>
        <css-doodle grid="6" id="mplayer">
          :doodle {margin: 3% 70%;
                @grid: 2 / 300px 60px;
                position: absolute;z-index: 1000;
                color: var(--color);
            transform: scale(1);
                --prog: 0%; --size: 40px; --ttmsg1: '00:00'; --ttmsg2: '00:00'; --color:LightPink; --state: paused;
      }
      /* 时间信息 : 左 */
      @nth(1) {
                @place: 10% 125%;
                :after { content: var(--ttmsg1); }
      }
      /* 控制器 */
      @nth(2) {
                @size: var(--size);
                @shape: windmill;
                @place: 50% 35%;
                background: var(--color);
                animation: rot 6s infinite linear var(--state);
      }
      /* 时间信息 : 右 */
      @nth(3) {
                @place: 90% 125%;
                :after { content: var(--ttmsg2); }
      }
      /* 进度条 */
      @nth(4) {
                @place: 50% 80%;
                @size: 60% 2px;
                background: #aaaaaa;
               display: grid;
                place-items: center start;
                :before {
                        content: '';
                        width: var(--prog);
                        height: 100%;
                        background: var(--color);
                }
      }
      @keyframes rot { to { transform: rotate(1turn); } }
        </css-doodle>
        <css-doodle grid="20">
                :doodle {
                        @size: 100% 100%;
                }
                position: absolute;
                top: @r(250)%;
               left: -30%;
                :after {
                        position: absolute;
                        content: '@p(✿,❁,❀,&#128174;,&#127802;)';
                        color: #ffffff;
                        font-size: @r(2, 30)px;
                }
                animation: fall @r(60,200)s @r(-60, 60)s infinite var(--state);
                @keyframes fall {
                        0% { left: 200%;top: 0%; transform: rotate(0deg); }
                100% {left: -80%; transform: rotate(@p(360, 720)deg); }}

        </css-doodle>
        <audio id="aud" src="https://www.qqmc.com/mp3/music274396953.mp3" autoplay loop></audio>

</div>

<script>
(function(){
        let script = document.createElement('script');
        script.src = 'https://unpkg.com/css-doodle@0.34.9/css-doodle.min.js';
        document.head.appendChild(script);
let mState = () => aud.paused ? ( papa.style.setProperty('--state', 'paused')) : ( papa.style.setProperty('--state', 'running'));
aud.addEventListener('play', mState, false);
        aud.addEventListener('pause', mState, false);
       aud.addEventListener('seeked', () => calcKey());
       
})();
(function(mkFS) {let setFullScreen = (user_set) => {let pa = user_set.pa;if(typeof(pa) !== 'object') return false;if(!user_set.set) user_set.set = 'color: snow;background: black; border: 0px solid snow; left: 40px; bottom: 40px;';btnMsg = document.createElement('span');btnMsg.style.cssText = `position: absolute; border-radius: 8px; padding: 4px; cursor: pointer; z-index:998; ${user_set.set}`;btnMsg.innerText = '全屏观赏';btnMsg.style.display = 'none';pa.appendChild(btnMsg);let timerId, fs = false;btnMsg.onclick = () => fs ? document.exitFullscreen() : pa.requestFullscreen();pa.addEventListener('mousemove', (e) => {clearTimeout(timerId);btnMsg.style.display = 'block';timerId = setTimeout('btnMsg.style.display = "none"', 3000);});document.addEventListener('fullscreenchange', () => {if (document.fullscreenElement !== null) {fs = true;btnMsg.innerText = '退出全屏';} else {fs = false;btnMsg.innerText = '全屏观赏';}});};mkFS.FS = setFullScreen;})(this);
FS({
                pa: papa,
               
set: 'backgroun: #333; color: snow; border: 0px solid snow; bottom: 90%; left: 20px;font:normal 2.1em 华文隶书;',
      });
(function() {
      let clickIdx = 0, progChg = 0, cursors = ['default','pointer','pointer'];
      let script = document.createElement('script');
      script.src = 'https://638183.freep.cn/638183/web/api/css-doodle.js';
      document.head.appendChild(script);
      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 = () => mplayer.style.setProperty('--state', aud.paused ? 'paused' : 'running');
      aud.addEventListener('play', mState, false);
      aud.addEventListener('pause', mState, false);
      aud.addEventListener('timeupdate', () => {
                mplayer.style.setProperty('--ttmsg1', `'${toMin(aud.currentTime)}'`);
                mplayer.style.setProperty('--ttmsg2', `'${toMin(aud.duration)}'`);
                mplayer.style.setProperty('--prog',`${100 * aud.currentTime / aud.duration}%`)
      });

      mplayer.onclick = () => {
                if(clickIdx === 1) aud.paused ? aud.play() : aud.pause();
                if(clickIdx === 2) aud.currentTime = progChg;
      }
      mplayer.onmousemove = (e) => {
                let size = parseInt(window.getComputedStyle(mplayer).getPropertyValue('--size')), ww = mplayer.offsetWidth, hh = mplayer.offsetHeight;
                clickIdx = e.offsetY > hh/1.5 ? 2 : (e.offsetX > (ww - size)/2 && e.offsetX < (ww + size)/2 && e.offsetY < hh/1.5 ? 1 : 0);
                mplayer.style.cursor = cursors;
                if(clickIdx > 1) progChg = aud.duration * e.offsetX / ww;
      }
})();
</script>

<script >
(function() {
/*原始lrc歌词*/
let lrcStr = `
杨大勇 - 我养的人和养我的人 (对唱版)
作词: 张凤敏
作曲: 王佳瑜
编曲: 环冠音乐
混音: 环冠音乐
和声: 雪无影
监制: 张凤敏
制作人: 罗智鸿
音乐总监: 杨大勇
推广: 环冠文化
OP: 环冠文化
SP: 星岳文化
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>

梦油 发表于 2023-5-13 20:44

谢谢水芙蓉朋友,祝你,和花潮的妈妈们节日快乐!

梦缘 发表于 2023-5-13 20:49

借老师的美帖祝花潮的妈妈们节日快乐!{:4_204:}

醉美水芙蓉 发表于 2023-5-13 20:53

梦油 发表于 2023-5-13 20:44
谢谢水芙蓉朋友,祝你,和花潮的妈妈们节日快乐!

谢谢梦油老师欣赏支持!

醉美水芙蓉 发表于 2023-5-13 20:53

梦缘 发表于 2023-5-13 20:49
借老师的美帖祝花潮的妈妈们节日快乐!

谢谢老师欣赏支持!母亲节快乐!

红影 发表于 2023-5-13 20:54

这个好像是借用亚伦老师的代码吧。
帖子做得很温暖,欣赏水芙蓉美女好帖,借帖同祝天下的母亲节日快乐{:4_187:}

醉美水芙蓉 发表于 2023-5-13 21:01

红影 发表于 2023-5-13 20:54
这个好像是借用亚伦老师的代码吧。
帖子做得很温暖,欣赏水芙蓉美女好帖,借帖同祝天下的母亲节日快乐{:4_ ...

这个播放器我始终做不好,只能套用了!

千羽 发表于 2023-5-13 21:08

水芙蓉的图做得很美,播放器太漂亮了{:4_187:}

醉美水芙蓉 发表于 2023-5-13 21:31

千羽 发表于 2023-5-13 21:08
水芙蓉的图做得很美,播放器太漂亮了

谢谢千羽欣赏支持!

红影 发表于 2023-5-13 21:37

醉美水芙蓉 发表于 2023-5-13 21:01
这个播放器我始终做不好,只能套用了!

你的帖子内容倒是很好的呢{:4_187:}

起个网名好难 发表于 2023-5-13 22:21

欣赏佳作!

醉美水芙蓉 发表于 2023-5-13 23:21

起个网名好难 发表于 2023-5-13 22:21
欣赏佳作!

谢谢老师欣赏支持!

马黑黑 发表于 2023-5-14 07:58

欣赏好帖并祝节日快乐

小文 发表于 2023-5-14 08:21

送上欣赏与祝福

醉美水芙蓉 发表于 2023-5-14 08:47

马黑黑 发表于 2023-5-14 07:58
欣赏好帖并祝节日快乐

黑黑老师早上好!

醉美水芙蓉 发表于 2023-5-14 08:48

小文 发表于 2023-5-14 08:21
送上欣赏与祝福

谢谢朋友支持!

梦油 发表于 2023-5-14 08:50

醉美水芙蓉 发表于 2023-5-13 20:53
谢谢梦油老师欣赏支持!

水芙蓉朋友节日快乐!

马黑黑 发表于 2023-5-14 09:42

醉美水芙蓉 发表于 2023-5-14 08:47
黑黑老师早上好!

节日好
页: [1]
查看完整版本: 祝论坛朋友母亲节快乐《我养的人和养我的人 (对唱版)》