马黑黑 发表于 2024-5-15 09:00

月下舞者

<style>
        #papa { margin: 20px 0 20px calc(50% - 581px); width: 1000px; height: 600px; background: lightblue; box-shadow: 3px 3px 6px gray; z-index: 1; overflow: hidden; user-select: none; display: grid; place-items: center; position: relative; }
        .vid { position: absolute; width: 100%; height: 100%; object-fit: cover; }
        .vid:nth-of-type(2) { mix-blend-mode: screen; }
        .vid:nth-of-type(3) { width: 160px; height: 160px; right: 0; top: 0; border-radius: 50% 0 50% 50%; cursor: pointer; }
</style>

<div id="papa">
        <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2154869910" autoplay loop></audio>
        <video class="vid" src="https://img.tukuppt.com/video_show/2419216/00/01/98/5b5459ad8a034.mp4" poster="https://638183.freep.cn/638183/t23/1/qbui.jpg" disablePictureInPicture loop muted></video>
        <video class="vid" src="https://img.tukuppt.com/video_show/2418175/00/18/65/5eef9970142b6.mp4" disablePictureInPicture loop muted></video>
        <video class="vid" id="player" src="https://img.tukuppt.com/video_show/2475824/00/08/20/5d19984aa5b7c.mp4" poster="https://638183.freep.cn/638183/small/f01.png" title="播放/暂停" disablePictureInPicture loop muted></video>
</div>

<script>
        var sF = document.createElement('script');
        sF.charset = 'UTF-8';
        sF.src = 'https://638183.freep.cn/638183/web/js2024/lrc_only.js';
        document.body.appendChild(sF);
        sF.onload = () => {
                LRC({
                        papa: '#papa',
                        lrc_css: 'top: 20px; color: lightblue; --bg: linear-gradient(rgba(0,0,128,.2), rgba(0,0,255,.6))',
                        lrcAr: geci,
                        btn: '#player'
                });
                aud.onplaying = aud.onpause = () => mState();
                player.onclick = () => aud.paused ? aud.play() : aud.pause();
        };
        var mState = () => {
                let vids = papa.querySelectorAll('video');
                vids.forEach(vid => aud.paused ? vid.pause() : vid.play());
                papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
        };
        papa.oncontextmenu = (e) => e.preventDefault();
        var geci = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ];
</script>

马黑黑 发表于 2024-5-15 09:01

本帖最后由 马黑黑 于 2024-5-15 09:13 编辑 <br /><br /><style>
.mum { position: relative; margin: 0; padding: 10px; font: normal 16px/20px Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; color: black; background: rgba(240, 240, 240,.95); box-shadow: 2px 2px 4px gray; border: thick groove lightblue; border-radius: 6px; }
.mum ::selection { background-color: rgba(0,100,100,.35); }
.mum div { margin: 0; padding: 0; }
.mum cl-cd { display: block; position: relative; margin: 0 0 0 50px; padding: 0 0 0 10px; white-space: pre-wrap; overflow-wrap: break-word; border-left: 1px solid silver; }
.mum cl-cd::before { position: absolute; content: attr(data-idx); width: 50px; color: gray; text-align: right; transform: translate(-70px); }
.tRed { color: red; }
.tBlue { color: blue; }
.tGreen { color: green; }
.tDarkRed { color: darkred; }
.tMagenta { color: magenta; }
</style>
<h2>相关说明</h2>
<p>lrc_only.js插件有重要更新(主要解决歌词同步失准问题),此前观赏过《小池塘》一帖的朋友需要按 Ctrl+F5 硬刷新一下。</p>
<p><br></p>
<p>帖子构思:使用两个视频做帖子的背景,其中舞者视频使用 mix-blend-mode: screen 进行融合;使用一个视频做音频播放控制器,布置在右上角是为了挡住背景视频的水印。帖子需要容器元素(此帖为 id="papa" 的 div,视频及歌词UI等元素均装在其中。</p>
<p><br></p>
<p>视频中有两个带有 poster 属性,用于不支持自动播放或视频加载速度偏慢时展示广告图片。</p>
<h2>帖子核心代码</h2>
<div class='mum'>
<cl-cd data-idx="1">&lt;<span class="tDarkRed">style</span>&gt;</cl-cd>
<cl-cd data-idx="2">&nbsp; &nbsp; #papa { <span class="tBlue">margin:</span> 20px 0 20px calc(50% - 581px); <span class="tBlue">width:</span> 1000px; <span class="tBlue">height:</span> 600px; <span class="tBlue">background:</span> lightblue; <span class="tBlue">box-shadow:</span> 3px 3px 6px gray; <span class="tBlue">z-index:</span> 1; <span class="tBlue">overflow:</span> hidden; <span class="tBlue">user-select:</span> none; <span class="tBlue">display:</span> grid; <span class="tBlue">place-items:</span> center; <span class="tBlue">position:</span> relative; }</cl-cd>
<cl-cd data-idx="3">&nbsp; &nbsp; .vid { <span class="tBlue">position:</span> absolute; <span class="tBlue">width:</span> 100%; <span class="tBlue">height:</span> 100%; <span class="tBlue">object-fit:</span> cover; }</cl-cd>
<cl-cd data-idx="4">&nbsp; &nbsp; .<span class="tBlue">vid:</span>nth-of-type(2) { <span class="tBlue">mix-blend-mode:</span> screen; }</cl-cd>
<cl-cd data-idx="5">&nbsp; &nbsp; .<span class="tBlue">vid:</span>nth-of-type(3) { <span class="tBlue">width:</span> 160px; <span class="tBlue">height:</span> 160px; <span class="tBlue">right:</span> 0; <span class="tBlue">top:</span> 0; <span class="tBlue">border-radius:</span> 50% 0 50% 50%; <span class="tBlue">cursor:</span> pointer; }</cl-cd>
<cl-cd data-idx="6">&lt;<span class="tDarkRed">/style</span>&gt;</cl-cd>
<cl-cd data-idx="7">&nbsp;</cl-cd>
<cl-cd data-idx="8">&lt;<span class="tDarkRed">div</span> <span class="tRed">id</span>=<span class="tMagenta">"papa"</span>&gt;</cl-cd>
<cl-cd data-idx="9">&nbsp; &nbsp; &lt;<span class="tDarkRed">audio</span> <span class="tRed">id</span>=<span class="tMagenta">"aud"</span> src=<span class="tMagenta">"https://music.163.com/song/media/outer/url?<span class="tRed">id</span>=2154869910"</span> autoplay loop&gt;&lt;<span class="tDarkRed">/audio</span>&gt;</cl-cd>
<cl-cd data-idx="10">&nbsp; &nbsp; &lt;<span class="tDarkRed">video</span> class=<span class="tMagenta">"vid"</span> src=<span class="tMagenta">"https://img.tukuppt.com/video_show/2419216/00/01/98/5b5459ad8a034.mp4"</span> poster=<span class="tMagenta">"https://638183.freep.cn/638183/t23/1/qbui.jpg"</span> disablePictureInPicture loop muted&gt;&lt;<span class="tDarkRed">/video</span>&gt;</cl-cd>
<cl-cd data-idx="11">&nbsp; &nbsp; &lt;<span class="tDarkRed">video</span> class=<span class="tMagenta">"vid"</span> src=<span class="tMagenta">"https://img.tukuppt.com/video_show/2418175/00/18/65/5eef9970142b6.mp4"</span> disablePictureInPicture loop muted&gt;&lt;<span class="tDarkRed">/video</span>&gt;</cl-cd>
<cl-cd data-idx="12">&nbsp; &nbsp; &lt;<span class="tDarkRed">video</span> class=<span class="tMagenta">"vid"</span> <span class="tRed">id</span>=<span class="tMagenta">"player"</span> src=<span class="tMagenta">"https://img.tukuppt.com/video_show/2475824/00/08/20/5d19984aa5b7c.mp4"</span> poster=<span class="tMagenta">"https://638183.freep.cn/638183/small/f01.png"</span> title=<span class="tMagenta">"播放/暂停"</span> disablePictureInPicture loop muted&gt;&lt;<span class="tDarkRed">/video</span>&gt;</cl-cd>
<cl-cd data-idx="13">&lt;<span class="tDarkRed">/div</span>&gt;</cl-cd>
<cl-cd data-idx="14">&nbsp;</cl-cd>
<cl-cd data-idx="15">&lt;<span class="tDarkRed">script</span>&gt;</cl-cd>
<cl-cd data-idx="16">&nbsp; &nbsp; <span class="tBlue">var</span> sF = <span class="tRed">document</span>.createElement(<span class="tMagenta">'script'</span>);</cl-cd>
<cl-cd data-idx="17">&nbsp; &nbsp; sF.charset = <span class="tMagenta">'UTF-8'</span>;</cl-cd>
<cl-cd data-idx="18">&nbsp; &nbsp; sF.src = <span class="tMagenta">'https://638183.freep.cn/638183/web/js2024/lrc_only.js'</span>;</cl-cd>
<cl-cd data-idx="19">&nbsp; &nbsp; <span class="tRed">document</span>.body.appendChild(sF);</cl-cd>
<cl-cd data-idx="20">&nbsp; &nbsp; sF.onload = () =&gt; {</cl-cd>
<cl-cd data-idx="21">&nbsp; &nbsp; &nbsp; &nbsp; LRC({</cl-cd>
<cl-cd data-idx="22">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">papa:</span> <span class="tMagenta">'#papa'</span>,</cl-cd>
<cl-cd data-idx="23">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lrc_<span class="tBlue">css:</span> <span class="tMagenta">'<span class="tBlue">top:</span> 20px; <span class="tBlue">color:</span> lightblue; <span class="tBlue">--bg:</span> linear-gradient(rgba(0,0,128,.2), rgba(0,0,255,.6))'</span>,</cl-cd>
<cl-cd data-idx="24">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">lrcAr:</span> geci</cl-cd>
<cl-cd data-idx="25">&nbsp; &nbsp; &nbsp; &nbsp; });</cl-cd>
<cl-cd data-idx="26">&nbsp; &nbsp; &nbsp; &nbsp; aud.onplaying = aud.onpause = () =&gt; mState();</cl-cd>
<cl-cd data-idx="27">&nbsp; &nbsp; &nbsp; &nbsp; player.onclick = () =&gt; aud.paused ? aud.play() : aud.pause();</cl-cd>
<cl-cd data-idx="28">&nbsp; &nbsp; };</cl-cd>
<cl-cd data-idx="29">&nbsp; &nbsp; <span class="tBlue">var</span> mState = () =&gt; {</cl-cd>
<cl-cd data-idx="30">&nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">let</span> vids = papa.querySelectorAll(<span class="tMagenta">'video'</span>);</cl-cd>
<cl-cd data-idx="31">&nbsp; &nbsp; &nbsp; &nbsp; vids.forEach(vid =&gt; aud.paused ? vid.pause() : vid.play());</cl-cd>
<cl-cd data-idx="32">&nbsp; &nbsp; &nbsp; &nbsp; papa.style.setProperty(<span class="tMagenta">'--state'</span>, aud.paused ? <span class="tMagenta">'paused'</span> : <span class="tMagenta">'running'</span>);</cl-cd>
<cl-cd data-idx="33">&nbsp; &nbsp; };</cl-cd>
<cl-cd data-idx="34">&nbsp; &nbsp; papa.oncontextmenu = (e) =&gt; e.preventDefault();</cl-cd>
<cl-cd data-idx="35">&nbsp; &nbsp; <span class="tBlue">var</span> geci = [, , ];</cl-cd>
<cl-cd data-idx="36">&lt;<span class="tDarkRed">/script</span>&gt;</cl-cd>
</div>

愤怒的葡萄 发表于 2024-5-15 09:03

这个比较特别啊。

红影 发表于 2024-5-15 09:35

这个用了3个视频呢,如此美妙的组合。那个跳舞灯光人太有意思了{:4_187:}

红影 发表于 2024-5-15 09:36

视频中有两个带有 poster 属性,用于不支持自动播放或视频加载速度偏慢时展示广告图片。

这设计真细心{:4_199:}

红影 发表于 2024-5-15 09:38

按钮视频id="player"被整合到封装里去了,这样跟着做就太方便了{:4_199:}

红影 发表于 2024-5-15 09:39

一上来就能欣赏到灯光人的舞蹈,真幸运{:4_173:}

马黑黑 发表于 2024-5-15 11:32

红影 发表于 2024-5-15 09:39
一上来就能欣赏到灯光人的舞蹈,真幸运

{:4_191:}

马黑黑 发表于 2024-5-15 11:32

愤怒的葡萄 发表于 2024-5-15 09:03
这个比较特别啊。

{:4_190:}

马黑黑 发表于 2024-5-15 11:33

红影 发表于 2024-5-15 09:38
按钮视频id="player"被整合到封装里去了,这样跟着做就太方便了

这个 id 是帖子需要,不是 lrc_only 插件的需要

马黑黑 发表于 2024-5-15 11:34

红影 发表于 2024-5-15 09:36
视频中有两个带有 poster 属性,用于不支持自动播放或视频加载速度偏慢时展示广告图片。

这设计真细心{: ...

{:4_190:}

马黑黑 发表于 2024-5-15 11:34

红影 发表于 2024-5-15 09:35
这个用了3个视频呢,如此美妙的组合。那个跳舞灯光人太有意思了

是的吧?轻盈妙曼,婀娜多姿{:4_170:}

南无月 发表于 2024-5-15 12:44

这跳舞的视频我当时怎么没找到呢,不然动感舞曲里是可以用用{:4_173:}

南无月 发表于 2024-5-15 12:48

前几次发的画布效效太惊艳,第一眼看到的时候,还以为是画布做的跳舞人。。{:4_173:}

马黑黑 发表于 2024-5-15 12:49

南无月 发表于 2024-5-15 12:48
前几次发的画布效效太惊艳,第一眼看到的时候,还以为是画布做的跳舞人。。

画布做这个就比较麻烦了,可能需要借助webGl编程

马黑黑 发表于 2024-5-15 12:49

南无月 发表于 2024-5-15 12:44
这跳舞的视频我当时怎么没找到呢,不然动感舞曲里是可以用用

可能是看不上眼吧

南无月 发表于 2024-5-15 12:54

马黑黑 发表于 2024-5-15 12:49
可能是看不上眼吧

根本没找到{:4_170:}
等有空我去换个试试

马黑黑 发表于 2024-5-15 13:09

南无月 发表于 2024-5-15 12:54
根本没找到
等有空我去换个试试

好哒

南无月 发表于 2024-5-15 17:24

马黑黑 发表于 2024-5-15 13:09
好哒

换上看了,还是放在这个贴子里效果更好。
那个背景是纯色,效果不咋滴

南无月 发表于 2024-5-15 17:27

马黑黑 发表于 2024-5-15 12:49
画布做这个就比较麻烦了,可能需要借助webGl编程

其实看到它是视频就觉得有点正常~~
不然画布画出这么复杂的跟电影似的有点太妖孽了{:4_170:}

webGl编程现在听你说,很高级的样子
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 月下舞者