马黑黑 发表于 2024-7-13 07:11

妈妈的油纸伞

本帖最后由 马黑黑 于 2024-7-13 07:16 编辑 <br /><br /><style>
#tiezi {
        --width: 1300px;
        margin: 100px 0 30px calc(50% - (var(--width) / 2 + 81px));
        width: var(--width);
        height: 720px;
        background: radial-gradient(circle, rgba(244,187,68,.3), rgba(250,218,94,.3), rgba(243,229,171,.3)), black;
        background-blend-mode: overlay normal;
        box-shadow: 3px 3px 6px #333;
        overflow: hidden;
        z-index: 1;
        position: relative;
}
.ma, .player, .vid { position: absolute; }
.ma { left: 60%; top: 15%; }
.player { cursor: pointer; animation: rot 8s linear infinite var(--state); }
.vid {       
        bottom: 0;
        width: 100%;
        height: calc(100% + 70px);
        object-fit: cover;
        mix-blend-mode: screen;
}
@keyframes rot { to { transform: rotate(1turn); } }
</style>

<div id="tiezi">
        <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2118177919" autoplay loop></audio>
        <video class="vid" src="https://img.tukuppt.com/video_show/2269348/00/14/15/5e1c06cdf1cd6.mp4" autoplay autoplay loop muted></video>
        <video class="vid" src="https://img.tukuppt.com/video_show/2418175/00/08/37/5d20843234224.mp4" autoplay loop muted></video>
        <div id="ma" class="ma">       
                <img id="player" class="player" src="https://638183.freep.cn/638183/small/yzvisj.png" alt="" />
        </div>
</div>

<script>
(function() {
        let ar = [, ];
        ar.forEach((e,k) => {
                let clone = ma.cloneNode(true);
                let btn = clone.querySelector('#player');
                clone.id="ma" + k;
                btn.id = 'player' + k;
                btn.style.width = e + 'px';
                btn.onclick = () => player.click();
                clone.style.cssText += `
                        left: ${e}%;
                        top: ${e}%;
                        filter: hue-rotate(${e}deg);
                `;
                tiezi.appendChild(clone);
        });
        let mState = () => {
                let players = document.querySelectorAll('.player'),
                vids = document.querySelectorAll('.vid');
                tiezi.style.setProperty('--state', ['running','paused'][+aud.paused]);
                players.forEach(player => player.title = ['暂停','播放'][+aud.paused]);
                vids.forEach(vid => aud.paused ? vid.pause() : vid.play());
        };
        aud.onplaying = aud.onpause = () => mState();
        player.onclick = () => aud.paused ? aud.play() : aud.pause();})();
</script>

马黑黑 发表于 2024-7-13 07:12

本帖最后由 马黑黑 于 2024-7-13 08:10 编辑 <br /><br /><h2>帖子代码</h2>
<div class="hE"><pre>
&lt;style&gt;
#tiezi {
        --width: 1300px;
        margin: 130px 0 30px calc(50% - (var(--width) / 2 + 81px));
        width: var(--width);
        height: 720px;
        background: radial-gradient(circle, rgba(244,187,68,.3), rgba(250,218,94,.3), rgba(243,229,171,.3)), black;
        background-blend-mode: overlay normal;
        box-shadow: 3px 3px 6px #111;
        overflow: hidden;
        z-index: 1;
        position: relative;
}
.ma, .player, .vid { position: absolute; }
.ma { left: 60%; top: 15%; }
.player { cursor: pointer; animation: rot 8s linear infinite var(--state); }
.vid {       
        bottom: 0;
        width: 100%;
        height: calc(100% + 60px);
        object-fit: cover;
        mix-blend-mode: screen;
}
@keyframes rot { to { transform: rotate(1turn); } }
&lt;/style&gt;

&lt;div id="tiezi"&gt;
        &lt;audio id="aud" src="https://music.163.com/song/media/outer/url?id=2118177919" autoplay loop&gt;&lt;/audio&gt;
        &lt;video class="vid" src="https://img.tukuppt.com/video_show/2269348/00/14/15/5e1c06cdf1cd6.mp4" autoplay autoplay loop muted&gt;&lt;/video&gt;
        &lt;video class="vid" src="https://img.tukuppt.com/video_show/2418175/00/08/37/5d20843234224.mp4" autoplay loop muted&gt;&lt;/video&gt;
        &lt;div id="ma" class="ma"&gt;       
                &lt;img id="player" class="player" src="https://static.fotor.com.cn/assets/res/sticker/a6d2caa2-29fe-487d-965e-20d6512e13c2_thumb.png" alt="" /&gt;
        &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
        let ar = [, ];
        ar.forEach((e,k) =&gt; {
                let clone = ma.cloneNode(true);
                let btn = clone.querySelector('#player');
                clone.id="ma" + k;
                btn.id = 'player' + k;
                btn.style.width = e + 'px';
                btn.onclick = () =&gt; player.click();
                clone.style.cssText += `
                        left: ${e}%;
                        top: ${e}%;
                        filter: hue-rotate(${e}deg);
                `;
                tiezi.appendChild(clone);
        });
        let mState = () =&gt; {
                let players = document.querySelectorAll('.player'),
                vids = document.querySelectorAll('.vid');
                tiezi.style.setProperty('--state', ['running','paused'][+aud.paused]);
                players.forEach(player =&gt; player.title = ['暂停','播放'][+aud.paused]);
                vids.forEach(vid =&gt; aud.paused ? vid.pause() : vid.play());
        };
        aud.onplaying = aud.onpause = () =&gt; mState();
        player.onclick = () =&gt; aud.paused ? aud.play() : aud.pause();
})();
&lt;/script&gt;
</pre></div>
<script>
        const sc = document.createElement('script');
        sc.chartset = 'utf-8';
        sc.src = 'https://638183.freep.cn/638183/web/js2024/helight.js';
        document.body.appendChild(sc);
</script>

马黑黑 发表于 2024-7-13 07:37

本帖最后由 马黑黑 于 2024-7-13 07:40 编辑

本帖,关于油纸伞小播的克隆:

31~33行代码是HTML小播的代码结构,一个 div 包裹一张图片(确切说是 img 标签)。div 的 id="ma", class="ma",这样设置是为了方便后面的克隆操作:克隆源id是克隆的操作依据、class对应的CSS选择器是 .ma,克隆成品使用这个 .ma 样式设定。

克隆操作的JS代码在 38~52 行。

38行,提前做一个数据数组,头两个数字是克隆结构使用的 left 和 top 属性值(百分比)、第三个数字是宽度、第四个数字是色相转换角度。

然后:

① 遍历以上预设数组,指定克隆源(40行)、深度克隆(true 表示 cloneNode 方法是深度克隆,源及其子元素均克隆)。

② 指定未来克隆产品的 img 和其父元素 div 的 id 标识,因为同一个页面,元素的 id 必须是唯一的,如果不做这一步,克隆表面上也会成功,但将来的交互功能会丧失,页面的其他交互可能也会受到影响。

③ 设置未来克隆产品的其他CSS属性,主要是定位、色相改变。

④ 帖子父元素追加克隆产品(代码51行)。

朵拉 发表于 2024-7-13 07:40

介个太美了,欣赏再欣赏{:4_178:}

马黑黑 发表于 2024-7-13 07:46

二楼的代码演示,如果看到黑白的,说明浏览器 Chromium 内核版本低于 105,或者,浏览器不是基于 Chromium 内核的。

代码展示的行号有交互功能,点击它,它对应的代码行会被选中。

南无月 发表于 2024-7-13 08:42

这个是多小播帖子~金色海面,生出红毫相光,大红毫相光~大红大绿的油纸伞,这些元素结合效果十分特别

南无月 发表于 2024-7-13 08:45

马黑黑 发表于 2024-7-13 07:37
本帖,关于油纸伞小播的克隆:

31~33行代码是HTML小播的代码结构,一个 div 包裹一张图片(确切说是 img ...

学习克隆小播及功能的例子和详细说明~~超级完美 的教程 贴

南无月 发表于 2024-7-13 08:48

马黑黑 发表于 2024-7-13 07:46
二楼的代码演示,如果看到黑白的,说明浏览器 Chromium 内核版本低于 105,或者,浏览器不是基于 Chromium...

着色代码也是新的,手机落后了,看不到色彩。。哭一个
行号有交互功能,点击可选,这个好先进。

红影 发表于 2024-7-13 09:45

马黑黑 发表于 2024-7-13 07:46
二楼的代码演示,如果看到黑白的,说明浏览器 Chromium 内核版本低于 105,或者,浏览器不是基于 Chromium...

行号还有交互作用呢,真没想到{:4_187:}

红影 发表于 2024-7-13 09:49

克隆,这个前面学过了,这里再进一步学习。
小播就这样被完美克隆出来了,一下子3个,每个都能被点击暂停。想弄几个小播就有几个,太赞了。{:4_199:}
两个视频叠加,就是背景,都不用去找背景图了,想调多大就多大,太赞了{:4_199:}

红影 发表于 2024-7-13 09:51

“true 表示 cloneNode 方法是深度克隆,源及其子元素均克隆”
所以设置两个数组,有3个小播,有一个就是源。去找了一下,最右边的伞就是源呢{:4_187:}

红影 发表于 2024-7-13 09:55

btn.style.width = e + 'px'; 这个是使用的数值,所以要加px
left: ${e}%;这个是用百分比,不用加px,还用了两种设置,便于学习和分析比较,这个太赞了{:4_199:}

发现“第三个数字是宽度、第四个数字是色相转换角度。”这个说反了。{:4_173:}

红影 发表于 2024-7-13 09:57

金色的海洋上,迷离的彩色线条,这个制作太漂亮了{:4_199:}

老谟深虑 发表于 2024-7-13 10:11

         谢谢老师的分享,好漂亮。

冬天的雨 发表于 2024-7-13 10:27

马老师现在越来越厉害了,欣赏学习{:4_199:}

梦江南 发表于 2024-7-13 11:38

马黑黑 发表于 2024-7-13 07:37
本帖,关于油纸伞小播的克隆:

31~33行代码是HTML小播的代码结构,一个 div 包裹一张图片(确切说是 img ...

哇,这也太美了吧!{:4_187:}

马黑黑 发表于 2024-7-13 12:00

梦江南 发表于 2024-7-13 11:38
哇,这也太美了吧!

{:4_190:}

马黑黑 发表于 2024-7-13 12:00

冬天的雨 发表于 2024-7-13 10:27
马老师现在越来越厉害了,欣赏学习

好久不见

马黑黑 发表于 2024-7-13 12:00

朵拉 发表于 2024-7-13 07:40
介个太美了,欣赏再欣赏

{:4_190:}

马黑黑 发表于 2024-7-13 12:00

老谟深虑 发表于 2024-7-13 10:11
谢谢老师的分享,好漂亮。

{:4_190:}
页: [1] 2 3 4 5 6
查看完整版本: 妈妈的油纸伞