|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2023-12-11 13:02 编辑
一个简简单单的帖子:逃脱引力 (52qingyin.cn) 或 逃脱引力 - 欢乐水吧 - 花潮论坛 - Powered by Discuz! (huachaowang.com)
这里主要分享粒子运动的实现:
(一)运动形态 - 从中间向四周缓缓而行,循环不已
父元素 id="papa" 的CSS选择器 #papa 里有两个语句, display: grid; place-items: center; ,是设定包括粒子在内的子元素的初始位置,都在父元素的中心处。这是父定子位。
CSS关键帧动画:
- @keyframes moving {
- from { opacity: 0; transform: translate(0,0); }
- to { opacity: 1; transform: translate(var(--x0),var(--y0)); }
- }
复制代码 出发时全透明,出发点是父元素的中心;到了目的地,全不透明,移动到 --x0、--y0 处。每一个粒子都按这个 moving 运动。
然后通过 JS,利用三角函数正余弦原理与圆周上的点坐标的关系,计算出 --x0 和 --y0 的值,从而让粒子各自朝向自己的方向行进。
(二)粒子的构建
粒子首先拥有自己的CSS样式,使用自定义选择器mov-ball,对应自定义标签 mov-ball,命名规则是需要一个短连线即可。在实体HTML代码中并没有 mov-ball 的身影,它们由 JS 生成,生成过程追加每一个粒子必须的CSS属性,其中包含有上述的CSS变量值,用 cssText 来完成:
- let all = 100;
- for(let i = 0; i < all; i++) {
- let movBall = document.createElement('mov-ball');
- let hudu = Math.PI / 180 * 360 / all * i;
- let xx = 600 * Math.cos(hudu), yy = 600 * Math.sin(hudu);
- movBall.style.cssText += `
- --x0: ${xx}px;
- --y0: ${yy}px;
- background: #${Math.random().toString(16).substr(-6)};
- animation: moving ${Math.random() * 20 + 20}s -${Math.random() * 20}s infinite var(--state);
- `;
- papa.prepend(movBall);
- }
复制代码 同时注意一个小技巧的应用, papa.prepend(movBall) ,prepend() 方法和 append() 方法都是追加子元素到父元素中,prepend 是追加到原有子元素的前面,append() 方法是追加到原有子元素的最后面。这里之所以改用 prepend,是为了让被追加的粒子在层级序列上降级,以避免它们干扰交互按钮的操作。当然,用 append 方法也不是不可以,我们过去经常使用,但都得设法提升具有交互点击功能的元素的层级(例如, z-index : 1000; ),改用 prepend 后就不必了。
核心在数学的应用。学好数理化,做个简单帖子谁害怕?
|
评分
-
| 参与人数 3 | 威望 +110 |
金钱 +220 |
经验 +110 |
收起
理由
|
千羽
| + 30 |
+ 60 |
+ 30 |
很给力! |
冬天的雨
| + 30 |
+ 60 |
+ 30 |
赞一个! |
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|