马黑黑 发表于 2024-4-27 10:36

科目0:No Limit

<style>
        #papa { margin: 20px 0 20px calc(50% - 721px); width: 1280px; height: 800px; background: linear-gradient(to right bottom, olive, tan, white, pink); box-shadow: 3px 3px 6px gray; z-index: 1; overflow: hidden; position: relative; }
        #canv { position: absolute; background: linear-gradient(to bottom right,pink,lightgreen,lightblue,tan); }
        #player { position: absolute; left: 20px; top: 20px; width: 160px; height: 160px; z-index: 3; cursor: pointer; animation: rot 1s linear infinite var(--state); }
        #vid { position: absolute; top: calc(50% - 640px); width: 1280px; height: 1280px; object-fit: cover; pointer-events: none; z-index: 2; mix-blend-mode: screen; animation: rot 2s linear infinite var(--state); }
        @keyframes rot { to { transform: rotate(-360deg); } }
</style>

<div id="papa">
        <audio id="aud" src="https://music.163.com/song/media/outer/url?id=5106509" loop autoplay></audio>
        <video id="vid" src="https://img.tukuppt.com/video_show/2414777/00/01/50/5b445b647f231.mp4" loop muted></video>
        <img id="player" src="https://638183.freep.cn/638183/small/ujye.webp" alt="" />
</div>

<script type="text/javascript">
        var sF = document.createElement('script');
        sF.src = 'https://638183.freep.cn/638183/web/js/pic2dot.js';
        sF.charset = 'utf-8';
        document.body.appendChild(sF);

        var p2d = {
                papa: '#papa',
                pic: 'https://638183.freep.cn/638183/t24/2/8270.jpg',
                skip: 4,
                width: 1280,
                height: 800
        };

        aud.onplaying = aud.onpause = () => {
                aud.paused ?
                        (vid.pause(), papa.style.setProperty('--state', 'paused')) :
                        (vid.play(), papa.style.setProperty('--state', 'running'));
        };
        player.onclick = () => aud.paused ? aud.play() : aud.pause();
</script>

马黑黑 发表于 2024-4-27 10:37

<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>
<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% - 721px); <span class="tBlue">width:</span> 1280px; <span class="tBlue">height:</span> 800px; <span class="tBlue">background:</span> linear-gradient(to right bottom, olive, tan, white, pink); <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">position:</span> relative; }</cl-cd>
<cl-cd data-idx="3">&nbsp; &nbsp; #canv { <span class="tBlue">position:</span> absolute; <span class="tBlue">background:</span> linear-gradient(to bottom right,pink,lightgreen,lightblue,tan); }</cl-cd>
<cl-cd data-idx="4">&nbsp; &nbsp; #player { <span class="tBlue">position:</span> absolute; <span class="tBlue">left:</span> 20px; <span class="tBlue">top:</span> 20px; <span class="tBlue">width:</span> 160px; <span class="tBlue">height:</span> 160px; <span class="tBlue">z-index:</span> 3; <span class="tBlue">cursor:</span> pointer; <span class="tBlue">animation:</span> rot 1s linear infinite <span class="tBlue">var</span>(--state); }</cl-cd>
<cl-cd data-idx="5">&nbsp; &nbsp; #vid { <span class="tBlue">position:</span> absolute; <span class="tBlue">top:</span> calc(50% - 640px); <span class="tBlue">width:</span> 1280px; <span class="tBlue">height:</span> 1280px; <span class="tBlue">object-fit:</span> cover; <span class="tBlue">pointer-events:</span> none; <span class="tBlue">z-index:</span> 2; <span class="tBlue">mix-blend-mode:</span> screen; <span class="tBlue">animation:</span> rot 2s linear infinite <span class="tBlue">var</span>(--state); }</cl-cd>
<cl-cd data-idx="6">&nbsp; &nbsp; @keyframes rot { to { <span class="tBlue">transform:</span> rotate(-360deg); } }</cl-cd>
<cl-cd data-idx="7">&lt;<span class="tDarkRed">/style</span>&gt;</cl-cd>
<cl-cd data-idx="8">&nbsp;</cl-cd>
<cl-cd data-idx="9">&lt;<span class="tDarkRed">div</span> <span class="tRed">id</span>=<span class="tMagenta">"papa"</span>&gt;</cl-cd>
<cl-cd data-idx="10">&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>=5106509"</span> loop autoplay&gt;&lt;<span class="tDarkRed">/audio</span>&gt;</cl-cd>
<cl-cd data-idx="11">&nbsp; &nbsp; &lt;<span class="tDarkRed">video</span> <span class="tRed">id</span>=<span class="tMagenta">"vid"</span> src=<span class="tMagenta">"https://img.tukuppt.com/video_show/2414777/00/01/50/5b445b647f231.mp4"</span> loop muted&gt;&lt;<span class="tDarkRed">/video</span>&gt;</cl-cd>
<cl-cd data-idx="12">&nbsp; &nbsp; &lt;<span class="tDarkRed">img</span> <span class="tRed">id</span>=<span class="tMagenta">"player"</span> src=<span class="tMagenta">"https://638183.freep.cn/638183/small/ujye.webp"</span> alt=<span class="tMagenta">""</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> type=<span class="tMagenta">"text/javascript"</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.src = <span class="tMagenta">'https://638183.freep.cn/638183/web/js/pic2dot.js'</span>;</cl-cd>
<cl-cd data-idx="18">&nbsp; &nbsp; sF.charset = <span class="tMagenta">'utf-8'</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;</cl-cd>
<cl-cd data-idx="21">&nbsp; &nbsp; <span class="tBlue">var</span> p2d = {</cl-cd>
<cl-cd data-idx="22">&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; <span class="tBlue">pic:</span> <span class="tMagenta">'https://638183.freep.cn/638183/t24/2/8270.jpg'</span>,</cl-cd>
<cl-cd data-idx="24">&nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">skip:</span> 4,</cl-cd>
<cl-cd data-idx="25">&nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">width:</span> 1280,</cl-cd>
<cl-cd data-idx="26">&nbsp; &nbsp; &nbsp; &nbsp; <span class="tBlue">height:</span> 800</cl-cd>
<cl-cd data-idx="27">&nbsp; &nbsp; };</cl-cd>
<cl-cd data-idx="28">&nbsp;</cl-cd>
<cl-cd data-idx="29">&nbsp; &nbsp; aud.onplaying = aud.onpause = () =&gt; {</cl-cd>
<cl-cd data-idx="30">&nbsp; &nbsp; &nbsp; &nbsp; aud.paused ?</cl-cd>
<cl-cd data-idx="31">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (vid.pause(), papa.style.setProperty(<span class="tMagenta">'--state'</span>, <span class="tMagenta">'paused'</span>)) :</cl-cd>
<cl-cd data-idx="32">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (vid.play(), papa.style.setProperty(<span class="tMagenta">'--state'</span>, <span class="tMagenta">'running'</span>));</cl-cd>
<cl-cd data-idx="33">&nbsp; &nbsp; };</cl-cd>
<cl-cd data-idx="34">&nbsp; &nbsp; player.onclick = () =&gt; aud.paused ? aud.play() : aud.pause();</cl-cd>
<cl-cd data-idx="35">&lt;<span class="tDarkRed">/script</span>&gt;</cl-cd>
</div>

马黑黑 发表于 2024-4-27 10:38

图片颗粒化效果的具体应用请参阅:
canvas画布:颗粒化图像 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! (huachaowang.com)

朵拉 发表于 2024-4-27 11:23

首席沙发,欣赏学习了~~{:4_178:}

红影 发表于 2024-4-27 14:12

科目0,看到这标题忍不住笑{:4_173:}

红影 发表于 2024-4-27 14:57

这个是鼠标触碰按钮范围时和离开帖子才能看到颗粒化效果,没看到css里的操作,是封装的效果么{:4_187:}

南无月 发表于 2024-4-27 16:54

看了代码知道,画布渐变。小点点的{:4_170:}颜色也是渐变的。。

南无月 发表于 2024-4-27 16:54

原来还以为跟上回的抽丝一样,都是一个色儿。。。
还有背景也是设了渐变。。。
图片未加载的时候,先看到的是渐变背景色。

南无月 发表于 2024-4-27 16:56

奇了,老师为啥不给这个视频加个透明度。。
跟如飞絮一般的大雪一样,转得满屏都是{:4_170:}

马黑黑 发表于 2024-4-27 16:58

南无月 发表于 2024-4-27 16:54
看了代码知道,画布渐变。小点点的颜色也是渐变的。。
颗粒按一定间隔取原图像素值,它会携带残缺的图片信息,间隔不大时拼凑出来的效果还是完整轮廓的图片。颗粒是圆形颗粒,颗粒间的缝隙由画布下面的底色填充。

马黑黑 发表于 2024-4-27 16:59

南无月 发表于 2024-4-27 16:56
奇了,老师为啥不给这个视频加个透明度。。
跟如飞絮一般的大雪一样,转得满屏都是
有些场景不需要透明度

马黑黑 发表于 2024-4-27 17:04

红影 发表于 2024-4-27 14:57
这个是鼠标触碰按钮范围时和离开帖子才能看到颗粒化效果,没看到css里的操作,是封装的效果么

鼠标移进移出事件是标准的JS DOM事件。当需要实现的功能CSS无能为力时(比如需要通过编程才能获得的数据),就用JS来完成。反之,如果CSS可以完成的,就尽量使用CSS去实现。

马黑黑 发表于 2024-4-27 17:06

南无月 发表于 2024-4-27 16:54
原来还以为跟上回的抽丝一样,都是一个色儿。。。
还有背景也是设了渐变。。。
图片未加载的时候,先看到 ...

较大的图片加载时可能需要一些时间,这里使用了异步加载图片技术,在图片尚未加载完成时,实现设置的宿主元素和其他可视元素会先被看到。不过,这些,从代码中可以了解得到。

南无月 发表于 2024-4-27 17:08

马黑黑 发表于 2024-4-27 16:58
颗粒按一定间隔取原图像素值,它会携带残缺的图片信息,间隔不大时拼凑出来的效果还是完整轮廓的图片。颗 ...

也就是说,圆点之间缝隙里透出来的是图片的颜色。。。
小圆点里面透出来的是画布的渐变色。。
所以是图片和画布的渐变色可以一起看到。。
现在我知道为何是呈现这样的效果了。。

南无月 发表于 2024-4-27 17:09

马黑黑 发表于 2024-4-27 16:59
有些场景不需要透明度

你都对。
其实这也不是雪,是飞旋的光束。。{:4_199:}

南无月 发表于 2024-4-27 17:11

感觉又是一个系列贴子。12345~~~{:4_173:}

南无月 发表于 2024-4-27 17:32

马黑黑 发表于 2024-4-27 17:06
较大的图片加载时可能需要一些时间,这里使用了异步加载图片技术,在图片尚未加载完成时,实现设置的宿主 ...

异步加载图片技术
头一回听说。。
加载么,一般不是越快越好的呗。

马黑黑 发表于 2024-4-27 17:41

南无月 发表于 2024-4-27 17:32
异步加载图片技术
头一回听说。。
加载么,一般不是越快越好的呗。

你想快就能快就好

南无月 发表于 2024-4-27 19:16

马黑黑 发表于 2024-4-27 17:41
你想快就能快就好

我想是这么想的。。{:4_173:}

马黑黑 发表于 2024-4-27 20:17

南无月 发表于 2024-4-27 19:16
我想是这么想的。。

为什么要用异步加载呢?道理是酱紫:

图片加载后,画布才能获取图片的像素信息,如果使用同步方式,辣么,图片还木有加载好,画布就开始工作,它画的是空白的东东。异步解决了这个问题:不管咋滴,画布我等着,图片加载好后,我再画。
页: [1] 2 3
查看完整版本: 科目0:No Limit