马黑黑 发表于 2024-3-10 08:26

橙色

本帖最后由 马黑黑 于 2024-3-10 08:29 编辑 <br /><br /><style>
#papa { margin: -60px 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: url('https://638183.freep.cn/638183/t24/1/orange.jpeg') no-repeat center/cover; box-shadow: 3px 3px 20px #000; overflow: hidden; z-index: 1; position: relative; }
#btnplay { position: absolute; width: 100px; left: 0; top: 10px; filter: hue-rotate(260deg) opacity(.8); transition: 6s; cursor: pointer; animation: rot 8s linear infinite var(--state); }
#vid { position: absolute; top: -130px; left: -150px; width: 400px; height: 400px; object-fit: cover; border-radius: 50%; opacity: .6; transition: 6s; mix-blend-mode: screen; pointer-events: none; }
@keyframes rot { to { transform: rotate(360deg); } }
</style>

<div id="papa">
        <audio id="aud" src="https://music.163.com/song/media/outer/url?id=1495851768" autoplay loop></audio>
        <video id="vid" src="https://img.tukuppt.com/video_show/15653652/00/85/69/60ff8be36ed3c.mp4" loop></video>
        <img id="btnplay" src="https://638183.freep.cn/638183/web/svg/sunfl-2.svg" alt="" />
</div>

<script>
(function() {
        let sF = document.createElement('script');
        sF.src = 'https://638183.freep.cn/638183/web/api/fullscreen.js';
        sF.charset = 'utf-8';
        document.querySelector('body').appendChild(sF);
        sF.onload = () => FS({papa: '#papa', css: '--bg: transparent; --color: #eee; bottom: 10px; left: 48%;'});
        let mState = () => aud.paused ? (papa.style.setProperty('--state','paused'),btnplay.title = '点击播放',vid.pause()) : (papa.style.setProperty('--state','running'),btnplay.title = '点击暂停',vid.play());
        let getOffsetPos = (ele) => { let x = ele.offsetLeft, y = ele.offsetTop, pa = ele.offsetParent; while(pa != null) { x += pa.offsetLeft; y += pa.offsetTop; pa = pa.offsetParent; } return {x, y}; };
        aud.onplaying = aud.onpause = () => mState();
        btnplay.onclick = () => aud.paused ? aud.play() : aud.pause();
        let movTimer = null, paWidth = papa.clientWidth, sonSize = btnplay.clientWidth, bodyWidth = document.body.clientWidth, paOffset = getOffsetPos(papa).x;
        document.onmousemove = function(e) {
    clearTimeout(movTimer);
    movTimer = setTimeout(function() { if (e.target.id === "btnplay" || e.target.id == 'btnFs') return; if (document.fullscreenElement === null) { let x = e.pageX; if (x < paOffset) x = paOffset; x = x - paOffset; if (x + sonSize >= paWidth) x = paWidth - sonSize; btnplay.style.cssText += `left: ${x}px;`; vid.style.cssText += `left: ${x - 150}px;`; } else { let xx = e.offsetX || e.layerX; if (xx + sonSize > bodyWidth) xx -= sonSize; btnplay.style.cssText += `left: ${xx}px;`; vid.style.cssText += `left: ${xx - 150}px;`; } }, 400);
};
})();
</script>

马黑黑 发表于 2024-3-10 08:27

本帖最后由 马黑黑 于 2024-3-10 08:44 编辑 <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: thin solid 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">#papa { <span class="tBlue">margin:</span> 0 0 0 calc(50% - 593px); <span class="tBlue">width:</span> 1024px; <span class="tBlue">height:</span> 640px; <span class="tBlue">background:</span> url(<span class="tMagenta">'https://638183.freep.cn/638183/t24/1/orange.jpeg'</span>) no-repeat center/cover; <span class="tBlue">box-shadow:</span> 3px 3px 20px #000; <span class="tBlue">overflow:</span> hidden; <span class="tBlue">z-index:</span> 1; <span class="tBlue">position:</span> relative; }</cl-cd>
<cl-cd data-idx="3">#btnplay { <span class="tBlue">position:</span> absolute; <span class="tBlue">width:</span> 100px; <span class="tBlue">left:</span> 0; <span class="tBlue">top:</span> 10px; <span class="tBlue">filter:</span> hue-rotate(260deg) opacity(.8); <span class="tBlue">transition:</span> 6s; <span class="tBlue">cursor:</span> pointer; <span class="tBlue">animation:</span> rot 8s linear infinite <span class="tBlue">var</span>(--state); }</cl-cd>
<cl-cd data-idx="4">#vid { <span class="tBlue">position:</span> absolute; <span class="tBlue">top:</span> -130px; <span class="tBlue">left:</span> -150px; <span class="tBlue">width:</span> 400px; <span class="tBlue">height:</span> 400px; <span class="tBlue">object-fit:</span> cover; <span class="tBlue">border-radius:</span> 50%; <span class="tBlue">opacity:</span> .6; <span class="tBlue">transition:</span> 6s; <span class="tBlue">mix-blend-mode:</span> screen; <span class="tBlue">pointer-events:</span> none; }</cl-cd>
<cl-cd data-idx="5">@keyframes rot { to { <span class="tBlue">transform:</span> rotate(360deg); } }</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>=1495851768"</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> <span class="tRed">id</span>=<span class="tMagenta">"vid"</span> src=<span class="tMagenta">"https://img.tukuppt.com/video_show/15653652/00/85/69/60ff8be36ed3c.mp4"</span> loop&gt;&lt;<span class="tDarkRed">/video</span>&gt;</cl-cd>
<cl-cd data-idx="11">&nbsp; &nbsp; &lt;<span class="tDarkRed">img</span> <span class="tRed">id</span>=<span class="tMagenta">"btnplay"</span> src=<span class="tMagenta">"https://638183.freep.cn/638183/web/svg/sunfl-2.svg"</span> alt=<span class="tMagenta">""</span> /&gt;</cl-cd>
<cl-cd data-idx="12">&lt;<span class="tDarkRed">/div</span>&gt;</cl-cd>
<cl-cd data-idx="13">&nbsp;</cl-cd>
<cl-cd data-idx="14">&lt;<span class="tDarkRed">script</span>&gt;</cl-cd>
<cl-cd data-idx="15">(<span class="tBlue">function</span>() {</cl-cd>
<cl-cd data-idx="16">&nbsp; &nbsp; <span class="tBlue">let</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/api/fullscreen.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>.querySelector(<span class="tMagenta">'body'</span>).appendChild(sF);</cl-cd>
<cl-cd data-idx="20">&nbsp; &nbsp; sF.onload = () =&gt; FS({<span class="tBlue">papa:</span> <span class="tMagenta">'#papa'</span>, <span class="tBlue">css:</span> <span class="tMagenta">'<span class="tBlue">--bg:</span> transparent; <span class="tBlue">--color:</span> #eee; <span class="tBlue">bottom:</span> 10px; <span class="tBlue">left:</span> 48%;'</span>});</cl-cd>
<cl-cd data-idx="21">&nbsp; &nbsp; <span class="tBlue">let</span> mState = () =&gt; aud.paused ? (papa.style.setProperty(<span class="tMagenta">'--state'</span>,<span class="tMagenta">'paused'</span>),btnplay.title = <span class="tMagenta">'点击播放'</span>,vid.pause()) : (papa.style.setProperty(<span class="tMagenta">'--state'</span>,<span class="tMagenta">'running'</span>),btnplay.title = <span class="tMagenta">'点击暂停'</span>,vid.play());</cl-cd>
<cl-cd data-idx="22">&nbsp; &nbsp; <span class="tBlue">let</span> getOffsetPos = (ele) =&gt; { <span class="tBlue">let</span> x = ele.offsetLeft, y = ele.offsetTop, pa = ele.offsetParent; <span class="tBlue">while</span>(pa != null) { x += pa.offsetLeft; y += pa.offsetTop; pa = pa.offsetParent; } <span class="tBlue">return</span> {x, y}; };</cl-cd>
<cl-cd data-idx="23">&nbsp; &nbsp; aud.onplaying = aud.onpause = () =&gt; mState();</cl-cd>
<cl-cd data-idx="24">&nbsp; &nbsp; btnplay.onclick = () =&gt; aud.paused ? aud.play() : aud.pause();</cl-cd>
<cl-cd data-idx="25">&nbsp; &nbsp; <span class="tBlue">let</span> movTimer = null, paWidth = papa.clientWidth, sonSize = btnplay.clientWidth, bodyWidth = <span class="tRed">document</span>.body.clientWidth, paOffset = getOffsetPos(papa).x;</cl-cd>
<cl-cd data-idx="26">&nbsp; &nbsp; <span class="tRed">document</span>.onmousemove = <span class="tBlue">function</span>(e) {clearTimeout(movTimer); movTimer = setTimeout(<span class="tBlue">function</span>() { <span class="tBlue">if</span> (e.target.<span class="tRed">id</span> === <span class="tMagenta">"player"</span> || e.target.<span class="tRed">id</span> == <span class="tMagenta">'btnFs'</span>) <span class="tBlue">return</span>; <span class="tBlue">if</span> (<span class="tRed">document</span>.fullscreenElement === null) { <span class="tBlue">let</span> x = e.pageX; <span class="tBlue">if</span> (x &lt; paOffset) x = paOffset; x = x - paOffset; <span class="tBlue">if</span> (x + sonSize &gt;= paWidth) x = paWidth - sonSize; btnplay.style.cssText += `<span class="tBlue">left:</span> ${x}px;`; vid.style.cssText += `<span class="tBlue">left:</span> ${x - 150}px;`; } <span class="tBlue">else</span> { <span class="tBlue">let</span> xx = e.offsetX || e.layerX; <span class="tBlue">if</span> (xx + sonSize &gt; bodyWidth) xx -= sonSize; btnplay.style.cssText += `<span class="tBlue">left:</span> ${xx}px;`; vid.style.cssText += `<span class="tBlue">left:</span> ${xx - 150}px;`; } }, 400);</cl-cd>
<cl-cd data-idx="27">};</cl-cd>
<cl-cd data-idx="28">})();</cl-cd>
<cl-cd data-idx="29">&lt;<span class="tDarkRed">/script</span>&gt;</cl-cd>
</div>
<p><br><br>【说明】</p>
<p>本帖,全屏模式下,鼠标移动至全屏控制按钮并悬停0.4秒时,不再影响播放按钮对鼠标指针的响应。因为全屏资源有更新,之前访问过《红色》等帖的朋友,需要硬刷新(按 Ctrl+F5)才能看到效果。之前发布的类似帖子未做修改。</p>

起个网名好难 发表于 2024-3-10 08:30

帖子打开全屏看蛮震撼的。

马黑黑 发表于 2024-3-10 08:47

起个网名好难 发表于 2024-3-10 08:30
帖子打开全屏看蛮震撼的。
动态的效果极少,就是图片好。全屏对图片品质的要求较高,我这张做了压缩,在一百英寸的电视机下播放效果勉强可以,我家猫咪会对旋转并移动的播放器感兴趣,眼睛一直跟随它。

红影 发表于 2024-3-10 09:02

黑黑又做了改进呢,真是精益求精{:4_199:}

红影 发表于 2024-3-10 09:05

非常奇特的地貌。去搜了一下,这个大概是喀斯特地貌吧,前面的红色应该是丹霞地貌{:4_173:}

马黑黑 发表于 2024-3-10 10:03

红影 发表于 2024-3-10 09:02
黑黑又做了改进呢,真是精益求精

这没啥,小细节,原本打算写fullscreen插件的时候已经打算给按钮一个id,后来觉得不给也行,再后来应用时觉得不给吧有时候不好在外部操作它

马黑黑 发表于 2024-3-10 10:04

红影 发表于 2024-3-10 09:05
非常奇特的地貌。去搜了一下,这个大概是喀斯特地貌吧,前面的红色应该是丹霞地貌

地质学家啦

红影 发表于 2024-3-10 11:02

马黑黑 发表于 2024-3-10 10:03
这没啥,小细节,原本打算写fullscreen插件的时候已经打算给按钮一个id,后来觉得不给也行,再后来应用时 ...

嗯嗯,能在外部操作的,最方便了。{:4_204:}

红影 发表于 2024-3-10 11:03

马黑黑 发表于 2024-3-10 10:04
地质学家啦

哈哈,搜来的,根据字面意思套的名称啊{:4_173:}

绿叶清舟 发表于 2024-3-10 11:21

一天一个色啊{:4_189:}

马黑黑 发表于 2024-3-10 12:05

绿叶清舟 发表于 2024-3-10 11:21
一天一个色啊

霓虹

马黑黑 发表于 2024-3-10 12:12

红影 发表于 2024-3-10 11:03
哈哈,搜来的,根据字面意思套的名称啊

地质学家就是酱紫来的

马黑黑 发表于 2024-3-10 12:12

红影 发表于 2024-3-10 11:02
嗯嗯,能在外部操作的,最方便了。

我这个也不是严格意义上的插件,外露一些接口也没啥

樵歌 发表于 2024-3-10 13:43

这地方在哪里嘛,以后要到此一游{:4_174:}

马黑黑 发表于 2024-3-10 17:00

樵歌 发表于 2024-3-10 13:43
这地方在哪里嘛,以后要到此一游

这里没鱼钓呢

南无月 发表于 2024-3-10 17:26

【说明】

本帖,全屏模式下,鼠标移动至全屏控制按钮并悬停0.4秒时,不再影响播放按钮对鼠标指针的响应。因为全屏资源有更新,之前访问过《红色》等帖的朋友,需要硬刷新(按 Ctrl+F5)才能看到效果。之前发布的类似帖子未做修改。

看了说明,再回去刷新一下红色。。{:4_199:}

南无月 发表于 2024-3-10 17:29

网站里的双胞胎贴子,果然也不相同。。{:4_173:}

红影 发表于 2024-3-10 17:30

马黑黑 发表于 2024-3-10 12:12
地质学家就是酱紫来的

哈哈,回个帖子就成了地质学家,这也太容易了{:4_205:}

红影 发表于 2024-3-10 17:30

马黑黑 发表于 2024-3-10 12:12
我这个也不是严格意义上的插件,外露一些接口也没啥

是黑黑为了方便我们而留的呢{:4_187:}
页: [1] 2 3 4 5 6
查看完整版本: 橙色