秋
本帖最后由 马黑黑 于 2025-10-27 13:11 编辑 <br /><br /><style>@import 'https://638183.freep.cn/638183/web/tz/tz.css';
.pa { --offsetX: 81px; --bg: url('https://638183.freep.cn/638183/t24/w7/qq66.webp') no-repeat center/cover; }
li-zi { position: absolute; top: -20px; width: 20px; height: 20px; border-radius: 50%; pointer-events: none; animation: down var(--duration) var(--delay) linear infinite var(--state); }
@keyframes down { to { transform: translateY(var(--yy)); } }
</style>
<div id="pa" class="pa"></div>
<script type="module">
import TZ from 'https://638183.freep.cn/638183/web/tz/tz.min.js';
const tz = TZ.TZ('pa');
tz.add('audio', '', '', {src: 'https://music.163.com/song/media/outer/url?id=2077974904'});
tz.add('img', '', 'rotate-ani sepia', {src: 'https://638183.freep.cn/638183/small/webp/f02.webp'}).playmp3();
const total = 30;
let frg = document.createDocumentFragment();
Array.from({length: total}).forEach((lz, idx) => {
lz = document.createElement('li-zi');
lz.style.cssText += `
--duration: ${tz.getRanInt(8, 16)}s;
--delay: ${tz.getRanInt(-10, 0)}s;
--yy: ${pa.offsetHeight + 40}px;
left: ${tz.ranPos(pa.offsetWidth, 20)}px;
background: linear-gradient(${tz.getRanInt(30, 180)}deg, ${tz.color16()}, ${tz.color16()});
`;
frg.appendChild(lz);
});
pa.appendChild(frg);
</script> 本帖最后由 马黑黑 于 2025-10-27 13:11 编辑
帖子代码
<style>
@import 'https://638183.freep.cn/638183/web/tz/tz.css';
.pa { --offsetX: 81px; --bg: url('https://638183.freep.cn/638183/t24/w7/qq66.webp') no-repeat center/cover; }
li-zi { position: absolute; top: -20px; width: 20px; height: 20px; border-radius: 50%; pointer-events: none; animation: down var(--duration) var(--delay) linear infinite var(--state); }
@keyframes down { to { transform: translateY(var(--yy)); } }
</style>
<div id="pa" class="pa"></div>
<script type="module">
import TZ from 'https://638183.freep.cn/638183/web/tz/tz.min.js';
const tz = TZ.TZ('pa');
tz.add('audio', '', '', {src: 'https://music.163.com/song/media/outer/url?id=2077974904'});
tz.add('img', '', 'rotate-ani sepia', {src: 'https://638183.freep.cn/638183/small/webp/f02.webp'}).playmp3();
const total = 30;
let frg = document.createDocumentFragment();
Array.from({length: total}).forEach((lz, idx) => {
lz = document.createElement('li-zi');
lz.style.cssText += `
--duration: ${tz.getRanInt(8, 16)}s;
--delay: ${tz.getRanInt(-10, 0)}s;
--yy: ${pa.offsetHeight + 40}px;
left: ${tz.ranPos(pa.offsetWidth, 20)}px;
background: linear-gradient(${tz.getRanInt(30, 180)}deg, ${tz.color16()}, ${tz.color16()});
`;
frg.appendChild(lz);
});
pa.appendChild(frg);
</script>
本帖演示 tzMaker 自定义粒子系统。
粒子系统首先通过CSS li-zi 选择器设计了基础样式,包括尺寸、形状、运行的动画等内容。其次,在JS中,动态创建 30 个 <li-zi> 标签,设置几个CSS变量、粒子的水平位置、背景色,这里大量借用 tzMaker 提供的通用方法分别获取两个整数之间的随机整数、随机16进制颜色。
tz.color16() 指令比较好理解,它获取随机的16进制颜色,返回颜色值(例如,#5d668c);
tz.getRanInt(min, max) 指令获取两个整数之间的随机整数,含边界数,返回随机整数。例如想在 0~20之间得到一个随机数,用 tz.getRanInt(0, 20) 或 tz.getRanInt(20, 0) 都可以实现。
这类工具性指令可以简化表达式的拼装。像第 26 行代码,三次获取随机值,如果使用原始的做法,代码恐怕会比较繁琐,指令使用tz提供的两个工具指令就很方便,更不用太多操心字符拼接问题。 另外,本帖没有进度条,没有全屏切换按钮。tzMaker就像搭积木一样,需要什么拿什么。
至于本帖为什么不放进度条和全屏按钮,很简单:帖子可变宽高会是的CSS动画的设计复杂化,所以不要全屏按钮;进度条则是忘了加。 漂亮,一派迷人的秋景……
li-zi 运行动画好像未控制呀? 杨帆 发表于 2025-10-27 13:07
漂亮,一派迷人的秋景……
li-zi 运行动画好像未控制呀?
对。没有加 var(--state) 喜欢这个播放按钮图{:5_106:} 马黑黑 发表于 2025-10-27 12:49
另外,本帖没有进度条,没有全屏切换按钮。tzMaker就像搭积木一样,需要什么拿什么。
至于本帖为什么不 ...
昨天的文字的那个也没有加全屏,tzMaker还真是像搭积木呢,想要什么就调出什么来{:4_204:} 这些粒子小球漂亮,不但是随机色,还是线性渐变的随机色,每个小球都是多色的彩球呢{:4_199:} 夕阳里的秋,秋也是四季中的暮年了,不像春那么朝气蓬勃,却很宁静厚重{:4_204:} 好漂亮的小播。秋意浓了! 梦江南 发表于 2025-10-27 17:01
好漂亮的小播。秋意浓了!
要入冬了 红影 发表于 2025-10-27 14:53
昨天的文字的那个也没有加全屏,tzMaker还真是像搭积木呢,想要什么就调出什么来
对的 效果漂亮,学生已交作业,请老师指正{:4_190:} 朵拉 发表于 2025-10-27 22:14
效果漂亮,学生已交作业,请老师指正
{:4_199:} 来欣赏马老师的精品佳作,祝您创作如春泉涌流不息! 音画唯美
歌声动听
制作大气,我喜欢!
音画合一,音乐与画面结合完美
页:
[1]
2