《明日幻想曲》代码及说明
一、代码<css-doodle id="mplayer">
:doodle {
@grid: 4 / 1024px 640px;
background: url('https://638183.freep.cn/638183/t23/1/fgjk.jpg') no-repeat center/cover;
margin: -80px 0 0 calc(50% - 593px);
box-shadow: 0 0 8px #000;
pointer-events: none;
--state: running;
}
@match(i <= 12) {
@place-cell: 50% 15%;
@size: calc(@i() * 12px);
@shape: bud 10;
border: 6px solid #@repeat(6, @p());
pointer-events: auto;
cursor: pointer;
animation: rot 4s infinite linear var(--state);
}
@match(i > 12) {
background: gray;
@size: @p(40px, 80px);
@shape: @p(whale,fish);
@place-cell: 720px 440px;
transform: rotate(calc((@size() - @i() + 1) * 30deg)) translate(80px);
}
@keyframes rot { to { transform: rotate(360deg); } }
</css-doodle>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1937724657" autoplay loop></audio>
<script>
(function() {
let script = document.createElement('script');
script.src = 'https://unpkg.com/css-doodle@0.34.8/css-doodle.min.js';
document.head.appendChild(script);
let mState = () => mplayer.style.setProperty('--state', aud.paused ? 'paused' : 'running');
aud.addEventListener('play', mState, false);
aud.addEventListener('pause', mState, false);
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
})();
</script>
本帖最后由 马黑黑 于 2023-4-27 19:44 编辑
二、简单解释
帖子由 css-doodle 构建:
02-09行::doodle {} 选择器,其中:
① 03行:4*4单元格,帖子尺寸 1024*640(px);
② 04行:帖子背景;
③ 05行:帖子定位;
④ 06行:帖子父窗口阴影;
⑤ 帖子主窗体不接受单击事件;
⑥ 播放控制器旋转变量 --state 赋值:running 表示旋转,其实应考虑浏览器阻止自动播放的情况,设为 paused 较好。
10-18行:播放控制器集群
选择器 @match(i <= 12) {} 中,match 表示匹配,匹配什么呢?小括号里的表达式,i <= 12,i 是 @i() 之意,即 @index() 函数,在 match() {} 选择器里,@ 可以不要(为的是与JS的相关表达相接近)、函数没有参数是可以不要小括号,故此,i <= 12 表示的是序号小于等于 12 的单元格(css-doodle单元格序号从 1 起算)。
11行:@place-cell: 50% 15%; ,设定单元格的统一位置;
12行:@size: calc(@i() * 12px); ,设定单元格的尺寸,大小与单元格序号(@i)相关,序号乘以基础大12px;
13行:单元格形状统一设定为 @shape: bud 10;
14行:border: 6px solid #@repeat(6, @p()); ,设置边框,颜色随机;
15行:pointer-events: auto; 设置元素集群可接收鼠标点击操作;
16行:cursor: pointer; ,设置鼠标指针为手型;
17行:调用关键帧动画 animation: rot 4s infinite linear var(--state);
19-25行:鱼和鲸鱼图案元素集群
选择器 @match(i > 12) {} ,匹配序号大于 12 的单元格样式:
20行:背景色;
21行:鱼或鲸鱼的尺寸,要么是 40px,要么是 80px;
22行:形状,要么是鲸鱼,要么是鱼(注意鲸鱼不是鱼额);
23行:鲸鱼或鱼的位置,720px 440px 是 xy坐标值;
24行:transform: rotate(calc((@size() - @i() + 1) * 30deg)) translate(80px); ,旋转(rotate)一定角度,30deg 是基准,@size() - @i() + 1 是单元格总数(@size())减去 单元格序号(@i())加 1 的算式,是因为鲸鱼或鱼的单元格序号从 13 开始;然后位移(translate)一定距离,以产生鱼头朝向水边的效果;
26行:关键帧动画
29行:audio播放器标签
31-41行:JS代码,其中:
33-35行:在论坛中引用 css-doodle 组件;
36-38行:音频监听相关;
39行:播放控制器点击事件
@i , @size 不需要()也行 起个网名好难 发表于 2023-4-27 20:12
@i , @size 不需要()也行
这个我都有说明的 醉美水芙蓉 发表于 2023-4-27 21:09
黑黑老师辛苦了!
{:4_191:} 本帖最后由 起个网名好难 于 2023-4-27 21:26 编辑
马黑黑 发表于 2023-4-27 21:13
这个我都有说明的
只看了代码没注意说明。
@index 和 @size 没有带参数的吧
黑黑辛苦又有新教程{:4_199:} 马黑黑 发表于 2023-4-27 19:06
二、简单解释
帖子由 css-doodle 构建:
还有详细说明,谢谢黑黑无私的分享 小辣椒 发表于 2023-4-28 18:55
还有详细说明,谢谢黑黑无私的分享
希望你也可以花点时间学学,这个挺好 小辣椒 发表于 2023-4-28 18:53
黑黑辛苦又有新教程
{:4_190:}喝水 黑黑辛苦,感谢分享{:4_187:} 红影 发表于 2023-4-28 21:41
黑黑辛苦,感谢分享
早上好
页:
[1]