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

《温暖的书屋》朗诵:一斛珠

<style>
#papa {
        margin: 80px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        box-shadow: 4px 8px 20px #000;
        position: relative;
      overflow: hidden;
}
#mplayer {
        left: 50%;
        bottom: 20px;
        transform: translate(-50%);
        width: fit-content;
        height: fit-content;
        color: tan;
        position: absolute;
}
#mplayer::before, #mplayer::after {
        position: absolute;
        content: attr(data-cu);
        bottom: 16px;
}
#mplayer::before { left: 10px; }
#mplayer::after {
        content: attr(data-du);
        right: 10px;
}
#btn {
        display: block;
        margin: auto;
        margin-bottom: 10px;
        width: 80px;
        height: 80px;
        border-radius: 50%;
        cursor: pointer;
        animation: rot 6s infinite linear var(--state);
}
#prog {
        width: 400px;
        height: 5px;
        border: 1px solid tan;
        border-radius: 5px;
        display: grid;
        place-items: center start;
        position: relative;
}
#prog::before, #prog::after {
        position: absolute;
        content: '';
        cursor: pointer;
}
#prog::before {
        width: var(--ww);
        height: 5px;
        border-radius: 5px;
        background: linear-gradient(to right, LightSkyBlue, green, LightSkyBlue);
}
#prog::after {
        width: 100%;
        height: 30px;
        border: 0px solid red;
}
.cap {
        position: absolute;
        left: calc(var(--ww) - 2px);
        width: 16px;
        height: 16px;
        background: LightSkyBlue;
        border-radius: 50%;
}
.pic {
        position: absolute;
        right: 0px;
        bottom: -80px;
        width: 250px;
        filter: blur(.5px) opacity(.8);
       
}
.pic1 {
        position: absolute;
        left: 80px;
        top: 420px;
        width: 240px;
       
}

.biankuang {
        position: absolute;
        width: 1024px; height: 640px;       
}
#lrc { --motion: cover1; --tt: 5s; --state: paused; position: absolute; left: 50%; transform: translate(-50%); top: 10px; font: bold 2.4em sans-serif; color: hsl(300, 100%, 100%); -webkit-background-clip: text; filter: drop-shadow(1px 1px 2px hsla(0, 0%, 0%, .95)); }
#lrc::before { position: absolute; content: attr(data-lrc); width: 20%; height: 100%; color: transparent; overflow: hidden; white-space: pre; background: linear-gradient(180deg, hsla(120, 100%, 50%, .45), hsla(200, 100%, 66%, .6), hsla(60, 100%, 50%, .75)); filter: inherit; -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%; } }
.vid { position: absolute; width: 1024px; height: 640px; object-fit: cover; }
@keyframes rot { to { transform: rotate(1turn); } }
</style>

<div id="papa">
<video class="vid" src="http://chuangshicdn.data.mvbox.cn/music/sp/23/04/12/23041216175024859312.mp4" autoplay="autoplay" loop="loop" muted="muted"></video>
        <img class="biankuang" src="https://pic.imgdb.cn/item/6361c92f16f2c2beb12d34c1.gif" alt="" />
        <img class="pic" src="https://pic.imgdb.cn/item/643690da0d2dde577771af7f.png" alt="" />
        <img class="pic1" src="https://pic.imgdb.cn/item/64369e560d2dde577786d8d9.png" alt="" />
      <div id="lrc" data-lrc="花潮lrc在线">花潮lrc在线</div>
        <div id="mplayer" data-du="00:00" data-cu="00:00">
                <img id="btn" src="https://pic.imgdb.cn/item/643690fa0d2dde577771d2d2.png" alt="" />
                <div id="prog"><span class="cap"></span></div>
        </div>
</div>
<audio id="aud" src="http://chuangshicdn.data.mvbox.cn/music/yc/23/04/12/23041216321928436847.mp3" loop autoplay></audio>

<script>
let canmove = false;

btn.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
aud.addEventListener('play', () => mplayer.style.setProperty('--state','running'));
aud.addEventListener('pause', () => mplayer.style.setProperty('--state','paused'));
aud.addEventListener('timeupdate', () => {
        if(!canmove) prog.style.setProperty('--ww', aud.currentTime * prog.offsetWidth / aud.duration + 'px');
        mplayer.dataset.cu = toMin(aud.currentTime);
        mplayer.dataset.du = toMin(aud.duration);
});
prog.addEventListener('mousemove', (e) => {
        if (!canmove) return;
        let pos = e.offsetX;
        if (pos < 0) pos = 0;
        if (pos > prog.offsetWidth) pos = prog.offsetWidth;
        prog.style.setProperty('--ww', e.offsetX + 'px');
});
prog.addEventListener('mousedown', (e) => {
        canmove = true;
});
prog.addEventListener('mouseup', (e) => {
        canmove = false;
        aud.currentTime = aud.duration * e.offsetX / prog.offsetWidth;
});
document.addEventListener('mouseup', () => canmove = false);

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 mKey = 0, mFlag = true;
let lrcAr = [
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
        ,
       
];
let vid = document.querySelector('.vid');
let mState = () => aud.paused ? (lrc.style.setProperty('--state', 'paused'), vid.pause()) : (lrc.style.setProperty('--state', 'running'), vid.play());
let showLrc = (time) => {let name = mFlag ? 'cover1' : 'cover2';lrc.innerHTML = lrcAr;lrc.dataset.lrc = lrcAr.replace(/<br>/, '\n');lrc.style.setProperty('--motion', name);lrc.style.setProperty('--tt', time + 's');lrc.style.setProperty('--state', 'running');mKey += 1;mFlag = !mFlag;};
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);};
aud.addEventListener('timeupdate', () => {for(let j = 0; j < lrcAr.length; j ++) {if (aud.currentTime >= lrcAr) {if (mKey === j) showLrc(lrcAr);else continue;}}});
aud.addEventListener('pause', () => mState());
aud.addEventListener('play', () => mState());
aud.addEventListener('seeked', () => calcKey());

</script>

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

因为要做文字同步,我将视频转化成了一个MP3,原视频只用视频,取消了声音{:4_173:}
借用了有声有色老师的边框,谢谢@有声有色老师{:4_204:}

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

配音秀里其实可以找到视频的mp4地址的,是这个https://video7.peiyinxiu.com/dow ... 49e4b_151200067.mp4
用视频地址和代码就可以发出来了。@一斛珠
当然这个帖子里的视频我另外上传了,发现配音秀里的视频地址时间一长就变化了。

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

本来想让视频也能被按钮控制,折腾半天,没弄成@马黑黑{:4_173:}
谢谢黑黑的代码。

千羽 发表于 2023-4-12 21:32

影儿的边框做得真美,色调的选择和声音的频率很是相融,效果美美哒{:4_187:}

千羽 发表于 2023-4-12 21:34

一斛珠的朗诵很有感染力,心儿不由得会安静了下来{:4_187:}

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

千羽 发表于 2023-4-12 21:32
影儿的边框做得真美,色调的选择和声音的频率很是相融,效果美美哒

边框是有声有色那借的,主要想遮挡原视频上的文字,为珠珠的朗诵另外配了同步文字{:4_173:}

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

千羽 发表于 2023-4-12 21:34
一斛珠的朗诵很有感染力,心儿不由得会安静了下来

是啊,一斛珠的朗诵很棒的{:4_204:}

千羽 发表于 2023-4-12 21:40

红影 发表于 2023-4-12 21:37
边框是有声有色那借的,主要想遮挡原视频上的文字,为珠珠的朗诵另外配了同步文字

嗯,看到了,影儿现在也是多面的巧手儿,棒棒哒{:4_187:}

千羽 发表于 2023-4-12 21:43

红影 发表于 2023-4-12 21:39
是啊,一斛珠的朗诵很棒的

你俩是珠联璧合,强强联手,效果就是杠杠的{:4_199:}

红影 发表于 2023-4-12 22:48

千羽 发表于 2023-4-12 21:40
嗯,看到了,影儿现在也是多面的巧手儿,棒棒哒

珠珠说配音秀里的帖子发不出来,就想着另外做一下{:4_173:}

红影 发表于 2023-4-12 22:49

千羽 发表于 2023-4-12 21:43
你俩是珠联璧合,强强联手,效果就是杠杠的
主要是一斛珠的视频好,我只是用黑黑的代码去给视频加点料{:4_173:}

马黑黑 发表于 2023-4-12 23:06

红影 发表于 2023-4-12 21:31
本来想让视频也能被按钮控制,折腾半天,没弄成@马黑黑
谢谢黑黑的代码。

控制视频是简单的:video标签和audio标签其实一样,都有 play() 和 pause() 方法,把代码整合到 mState() 函数里即可(过去教过的):

let vid = document.querySelector('.vid');
let mState = () => aud.paused ? (lrc.style.setProperty('--state', 'paused'), vid.pause()) : (lrc.style.setProperty('--state', 'running'), vid.play());

第一行代码获取 video 标签操作权,video 有 class="vid" 属性,可以这样获取操作权。

第二行,整合lrc歌词同步的控制和对视频的控制到函数 mState() 中。

一斛珠 发表于 2023-4-12 23:15

哎呀呀,红影这姑娘文采过人,玩代码也是惊人啊!

一斛珠 发表于 2023-4-12 23:16

玩代码费眼睛,看的我好感动啊!

一斛珠 发表于 2023-4-12 23:16

来来,抱一个。{:5_150:}

一斛珠 发表于 2023-4-12 23:21

红影 发表于 2023-4-12 21:39
是啊,一斛珠的朗诵很棒的

哈,学读了许多,也就这个好一点,所以贴来了。

谢谢影儿,辛苦你了,我很感动。

朝云暮雨 发表于 2023-4-13 00:23

图字和声音都绝配。好{:4_204:}

朝云暮雨 发表于 2023-4-13 00:24

安静,优雅,书香的味道{:4_204:}

樵歌 发表于 2023-4-13 06:43

啥叫珠联璧合,这就是!
页: [1] 2 3 4 5 6 7
查看完整版本: 《温暖的书屋》朗诵:一斛珠