|
|

楼主 |
发表于 2025-7-14 20:16
|
显示全部楼层
代码:
- <style>
- /* 多个粒子绕圆圈演示 */
- #wrap {
- --size: 500px; /* 容器元素尺寸 */
- margin: 100px auto;
- width: var(--size);
- height: var(--size);
- border: 4px dotted gray;
- border-radius: 50%;
- display: grid;
- place-items: center;
- position: relative;
- }
- #wrap::before {
- position: absolute;
- content: '点击开始/暂停';
- cursor: pointer;
- }
- li-zi {
- position: absolute;
- border-radius: 50%;
- background: radial-gradient(at 20% 30%, tan 1%, skyblue);
- box-shadow: 4px 4px 8px gray;
- transform: rotate(var(--deg)) translate(var(--r));
- }
- </style>
- <section id="wrap"></section>
- <script>
- // 声明粒子数、粒子数组、粒子尺寸、请求关键帧id、粒子运行开关
- var total = 12, lzAr = [], lzSize = 60, rtime, isRun = false;
- // 创建粒子并初始化CSS数据
- Array.from({length: total}).forEach( (lz, idx) => {
- var angle = 360 / total * idx; // 角度
- var r = (wrap.clientWidth + lzSize) / 2 - lzSize / 2; // 绕圈半径
- lz = document.createElement('li-zi');
- lz.style.cssText += `
- width: ${lzSize}px;
- height: ${lzSize}px;
- --deg: ${angle}deg;
- --r: ${r}px;
- `;
- lzAr.push({ elm: lz, a: angle });
- wrap.appendChild(lz);
- });
- // 容器单击事件
- wrap.onclick = () => {
- isRun ? cancelAnimationFrame(rtime) : animate();
- isRun = !isRun;
- };
- // 循环运行动画
- function animate() {
- rtime = requestAnimationFrame(animate);
- lzAr.forEach( (lz, idx) => {
- lz.elm.style.setProperty('--deg', lz.a + 'deg');
- lz.a = (lz.a + 0.5) % 360;
- });
- }
- </script>
复制代码
|
评分
-
| 参与人数 1 | 威望 +50 |
金钱 +100 |
经验 +50 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|