三星望月
<style>#papa { margin: 20px 0 20px calc(50% - 721px); width: 1280px; height: 720px; background: lightblue; box-shadow: 2px 2px 6px #000; overflow: hidden; z-index: 1; position: relative; }
.vid { position: absolute; top: -70px; width: 100%; height: calc(100% + 70px); object-fit: cover; pointer-events: none; }
.vid:nth-of-type(2) { height: 60%; height: 60%; transform: rotate(-10deg); mix-blend-mode: screen; opacity: .5; }
.star { position: absolute; left: 300px; top: 40px; cursor: pointer; animation: ani 1.5s linear infinite alternate var(--state); }
.star:nth-of-type(2) { left: 480px; top: 160px; animation-delay: -.5s; }
.star:nth-of-type(3) { left: 600px; top: 10px; animation-delay: -1s; }
@keyframes ani { from { transform: rotate(-10deg) scale(.8); opacity: .2; } to { transform: rotate(10deg) scale(1.5); opacity: .9; } }
</style>
<div id="papa">
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=31563718" autoplay loop></audio>
<video class="vid" src="https://img.tukuppt.com/video_show/2418175/00/08/31/5d231588f166b.mp4" loop muted></video>
<video class="vid" src="https://img.tukuppt.com/video_show/2269348/00/02/02/5b4efb7022208.mp4" loop muted></video>
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
</div>
<script>
(function() {
const vids = document.querySelectorAll('.vid'), stars = document.querySelectorAll('.star');
aud.onplaying = aud.onpause = () => {
papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
vids.forEach( vid => aud.paused ? vid.pause() : vid.play());
stars.forEach(star => star.title = aud.paused ? '点击播放' : '点击暂停');
};
stars.forEach(star => star.onclick = () => aud.paused ? aud.play() : aud.pause());
})();
</script>
帖子代码
<style>
#papa { margin: 20px 0 20px calc(50% - 721px); width: 1280px; height: 720px; background: lightblue; box-shadow: 2px 2px 6px #000; overflow: hidden; z-index: 1; position: relative; }
.vid { position: absolute; top: -70px; width: 100%; height: calc(100% + 70px); object-fit: cover; pointer-events: none; }
.vid:nth-of-type(2) { height: 60%; height: 60%; transform: rotate(-10deg); mix-blend-mode: screen; opacity: .5; }
.star { position: absolute; left: 300px; top: 40px; cursor: pointer; animation: ani 1.5s linear infinite alternate var(--state); }
.star:nth-of-type(2) { left: 480px; top: 160px; animation-delay: -.5s; }
.star:nth-of-type(3) { left: 600px; top: 10px; animation-delay: -1s; }
@keyframes ani { from { transform: rotate(-10deg) scale(.8); opacity: .2; } to { transform: rotate(10deg) scale(1.5); opacity: .9; } }
</style>
<div id="papa">
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=31563718" autoplay loop></audio>
<video class="vid" src="https://img.tukuppt.com/video_show/2418175/00/08/31/5d231588f166b.mp4" loop muted></video>
<video class="vid" src="https://img.tukuppt.com/video_show/2269348/00/02/02/5b4efb7022208.mp4" loop muted></video>
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
<img class="star" alt="" src="https://638183.freep.cn/638183/t22/webp/star.webp" />
</div>
<script>
(function() {
const vids = document.querySelectorAll('.vid'), stars = document.querySelectorAll('.star');
aud.onplaying = aud.onpause = () => {
papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
vids.forEach( vid => aud.paused ? vid.pause() : vid.play());
stars.forEach(star => star.title = aud.paused ? '点击播放' : '点击暂停');
};
stars.forEach(star => star.onclick = () => aud.paused ? aud.play() : aud.pause());
})();
</script>
本帖没有新的知识点,主要是再次复习多按钮、多视频的联动控制。
(一)多按钮联动控制
按钮需要 class 标识,第15、16、17行代码,img 标签 class=“star",我们可以通过这一共性标识拿到操作它们的依据:声明一个全局变量 stars,通过 querySelectorAll() 获得操作标识并赋值给 stars(代码22行)。然后在相关代码流中,使用 stars.forEach(star => ...); 循环迭代语句逐一操作按钮的相关事件或属性(代码第26行、第28行)。
按钮的CSS关键帧动画则通过操作CSS变量 --state 加以实现。元素对应的CSS属性即 animation 属性加有var(--state)(代码在第 05 行),表明关键帧动画的开关是它,我们可以依据音频是否播放来决定此开关的运行状态,即停止或运行二选一(代码在第24行)。
(二)多视频联动控制
多视频的播放、暂停控制,应与音频同步。要实现联动控制,和按钮一样,也得先拿到操作标识,道理和按钮的一样:声明变量 vids 并赋值给它,然后按 vids.forEach(vid => ...); 遍历每一个视频、进行相关操作,代码在第 25 行)。 三星望月美,群星更美。那群星渐渐汇集成银河,又渐渐散去,璀璨的星星在宇宙中绽放出绚丽的光彩,增添了无尽的神秘与美丽。 美不胜收~~{:4_178:} 三颗星星挺漂亮的。 愤怒的葡萄 发表于 2024-5-29 12:20
三颗星星挺漂亮的。
{:4_190:} 朵拉 发表于 2024-5-29 11:19
美不胜收~~
{:4_190:} 梦油 发表于 2024-5-29 09:52
三星望月美,群星更美。那群星渐渐汇集成银河,又渐渐散去,璀璨的星星在宇宙中绽放出绚丽的光彩,增添了无 ...
中午好{:4_190:} 马黑黑 发表于 2024-5-29 12:24
马版一直在线啊?
愤怒的葡萄 发表于 2024-5-29 12:25
马版一直在线啊?
{:4_191:} 马黑黑 发表于 2024-5-29 12:26
我也刚刚上线,花潮是一个小众论坛,活跃的坛友相对较少,我也只是偶尔上来一会的。
愤怒的葡萄 发表于 2024-5-29 12:26
我也刚刚上线,花潮是一个小众论坛,活跃的坛友相对较少,我也只是偶尔上来一会的。
热热闹闹的论坛现在也不多 马黑黑 发表于 2024-5-29 08:23
本帖没有新的知识点,主要是再次复习多按钮、多视频的联动控制。
(一)多按钮联动控制
多按钮和多视频控制,这次写得更加详细了。。好笔记,拿走了。。{:4_173:} 夜月视频加上飞翔的粒子,还有三个大的星光闪烁图片,
现在知道为何叫三星望月了。
这个夜空真美。。。{:4_199:} 南无月 发表于 2024-5-29 12:54
夜月视频加上飞翔的粒子,还有三个大的星光闪烁图片,
现在知道为何叫三星望月了。
这个夜空真美。。。{: ...
{:4_190:} 南无月 发表于 2024-5-29 12:52
多按钮和多视频控制,这次写得更加详细了。。好笔记,拿走了。。
这类问题以后不再重复讲解了 漂亮!音乐动听!{:4_199:} 马黑黑 发表于 2024-5-29 12:25
中午好
你以你的知识为花潮带来了繁荣,真值得敬佩! 马黑黑 发表于 2024-5-29 14:00
这几个元素协调的令人惊叹,十分完美 的画面{:4_199:}