css-doodle加餐教程(四)
本帖最后由 马黑黑 于 2023-4-14 08:43 编辑制作一个和 苍穹 帖子类似的2d粒子特效
知识准备:
① 我们需要用到一个很快会在入门教程中介绍的 css-doodle 函数,@rand() ,该函数返回两个数之间的一个浮点数值,例如,@rand(0,3) 会返回 0 - 3 之间的一个浮点数。@rand() 函数内的参数可以只要一个数字,例如,@rand(2),它将返回在 0 - 2 之间的浮点数。@rand() 函数可以缩写成 @r() 。
② 相关 CSS 知识,例如 calc 计算函数、rgba()颜色表达体系、@keyframes 关键帧动画选择器、animation 关键帧动画调用属性等。
霸王硬上弓:直接上代码——
<css-doodle grid="20">
:doodle {
@size: 400px;
background: #000;
}
background: rgba(@r(255), @r(255), @r(255), @calc(@r(.5) + .5));
border-radius: 50%;
@size: @r(2,8)px;
@place-cell: 50% 102%;
animation: ani 12s @r(-20,20)s infinite alternate;
@keyframes ani { to { transform: rotate(@r(-40,40)deg) translateY(-300px); } }
</css-doodle>
代码解释:
行1和行12:css-doodle 标签。其中,行1的 grid="20" 表示建立一个 20x20 的网格;
行2至行5:css-doodle 主元素设定,其中,行3设置父元素尺寸为 400x400(px),行4设置主元素背景色;
行6至行11:这些设置都是基于网格里的所有单元格,即主元素下的子元素,其中:
行6:随机设定每一个单元格的背景色,使用 rgba(R,G,B,Alpha) 颜色体系,R、G、G、Alpha 四个参数值均使用 css-doodle 的 @r() 函数获取,Alpha 系数还使用 CSS 的 calc() 计算函数确保其中不低于 0.5 也不会高于该系数的峰值 1 ;
行7:纯CSS属性,所有单元格都设置成圆形;
行8:使用 @r() 函数随机设置各单元格大小,最小 2x2(px)、最大 8x8(px);
行9:用 @place-cell 定位单元格,横向 50%,纵向 102%,这么设置横与纵的方向定位,是为了初始时令元素相对在横向中心处、纵向底部且隐藏单元格;
行10:用 animation 属性调用 ani 关键帧动画,12s 的运行周期,延时从 -20 至 20 秒之间,循环且往复运行。负值的延时,使得粒子的状态在初始运行时就能体现出来:负值延时会立即执行,且立即进入负值转正值的周期状态,例如,设置 -2s 的运行延时,则该粒子一开始就进入到运行周期环节中的第2秒的状态。
行11:设计一个名为 ani 的关键帧动画,先随机在 -40deg 至 40deg 之间进行旋转,然后沿Y轴上升 300 px,rotate 结合 translate 转换会令运动对象做弧线运动。
效果演示:请将代码复制到 http://mahei.freeee.ml/api/pencilcode/pencilcode-ddl.html 页面运行查看。
使用原生 CSS+HTML+JS实现类似效果的代码:
<style>
#mydiv {
margin: 20px auto;
width: 400px;
height: 400px;
background: #000;
overflow: hidden;
cursor: pointer;
position: relative;
}
.dot {
position: absolute;
left: 50%;
bottom: -10px;
width: 4px;
height: 4px;
border-radius: 50%;
background: snow;
}
@keyframes ani { to { transform: rotate(var(--deg)) translateY(-300px); }}
</style>
<div id="mydiv"></div>
<script>
Array.from({length: 400}).forEach( (item,key) => {
let sp = document.createElement('span');
let ww = Math.random() * 6 + 2;
sp.className = 'dot';
sp.style.cssText += `
--deg: ${-50 + Math.random() * 100}deg;
width: ${ww}px;
height: ${ww}px;
background: #${Math.random().toString(16).substr(-6)};
animation: ani 10s ${Math.random() * key - 4}s infinite alternate;
`;
mydiv.appendChild(sp);
});
</script>以上代码渲染的效果放在楼下,效果与 css-doodle 相比会有所差异,因为一些值的设置范围不尽一致
<style>
#mydiv {
margin: 20px auto;
width: 400px;
height: 400px;
background: #000;
overflow: hidden;
cursor: pointer;
position: relative;
}
.dot {
position: absolute;
left: 50%;
bottom: -10px;
width: 4px;
height: 4px;
border-radius: 50%;
background: snow;
}
@keyframes ani { to { transform: rotate(var(--deg)) translateY(-300px); }}
</style>
<div id="mydiv"></div>
<script>
Array.from({length: 400}).forEach( (item,key) => {
let sp = document.createElement('span');
let ww = Math.random() * 6 + 2;
sp.className = 'dot';
sp.style.cssText += `
--deg: ${-50 + Math.random() * 100}deg;
width: ${ww}px;
height: ${ww}px;
background: #${Math.random().toString(16).substr(-6)};
animation: ani 10s ${Math.random() * key - 4}s infinite alternate;
`;
mydiv.appendChild(sp);
});
</script> DZ没法使用css-doodle ,这真让人头疼。好在黑黑能用原生 CSS+HTML+JS实现类似效果,厉害{:4_431:} 红影 发表于 2023-4-14 16:28
DZ没法使用css-doodle ,这真让人头疼。好在黑黑能用原生 CSS+HTML+JS实现类似效果,厉害
帖子先做,然后才用 css-doodle 做类似效果 马黑黑 发表于 2023-4-14 18:10
帖子先做,然后才用 css-doodle 做类似效果
虽然 css-doodle 看这个更简洁,但还是习惯帖子的做法。 红影 发表于 2023-4-14 22:44
虽然 css-doodle 看这个更简洁,但还是习惯帖子的做法。
这要看应用场景和效果的复杂度。css-doodle可能更擅长做复杂类型的东东。 马黑黑 发表于 2023-4-14 23:57
这要看应用场景和效果的复杂度。css-doodle可能更擅长做复杂类型的东东。
是啊,它用整合好的东西,更容易去做复杂的{:4_204:} 红影 发表于 2023-4-15 12:56
是啊,它用整合好的东西,更容易去做复杂的
是的,很多功能都封装在那里 向经典粒子束致敬 雨中悄然 发表于 2023-4-15 21:39
向经典粒子束致敬
{:5_108:} 马黑黑 发表于 2023-4-15 13:11
是的,很多功能都封装在那里
在这点上,黑黑的整站程序比DZ的好,可以包罗万象。DZ估计自己用了现成的一些东西,而使得css-doodle没法使用吧? 红影 发表于 2023-4-16 09:13
在这点上,黑黑的整站程序比DZ的好,可以包罗万象。DZ估计自己用了现成的一些东西,而使得css-doodle没法 ...
不是这样理解。
dz之所以不让用第三方JS,是因为:一防冲突,dz也是用了大量的第三方库;二保安全,JS能干的事情毕竟多,如果开放了,论坛的安全性会打折扣。 马黑黑 发表于 2023-4-16 09:29
不是这样理解。
dz之所以不让用第三方JS,是因为:一防冲突,dz也是用了大量的第三方库;二保安全,JS ...
哦,还有这的考虑啊。我对建站不懂,黑黑不说,还不知道呢{:4_204:} 红影 发表于 2023-4-16 11:16
哦,还有这的考虑啊。我对建站不懂,黑黑不说,还不知道呢
dz是一个很优秀的论坛程序 马黑黑 发表于 2023-4-16 11:37
dz是一个很优秀的论坛程序
惟一的不足就是不能用css-doodle加餐教程{:4_173:} 红影 发表于 2023-4-16 17:41
惟一的不足就是不能用css-doodle加餐教程
其实可以用,要做一些加工 马黑黑 发表于 2023-4-16 19:09
其实可以用,要做一些加工
这个只能黑黑加工了,我肯定不行{:4_173:} 红影 发表于 2023-4-16 22:25
这个只能黑黑加工了,我肯定不行
这个比较麻烦额 马黑黑 发表于 2023-4-16 22:26
这个比较麻烦额
不管怎么麻烦,你肯定能弄出来的{:4_187:}
页:
[1]
2