Skip to content

Commit c86e0de

Browse files
committed
upd: Adjust svg icons to components
1 parent 5f04a8b commit c86e0de

File tree

13 files changed

+370
-249
lines changed

13 files changed

+370
-249
lines changed

src/client/components/beams.vue

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ if (typeof window !== 'undefined') {
1919
});
2020
}
2121
22-
23-
2422
interface BeamsProps {
2523
beamWidth?: number;
2624
beamHeight?: number;
@@ -42,7 +40,7 @@ const props = withDefaults(defineProps<BeamsProps>(), {
4240
noiseIntensity: 1.75,
4341
scale: 0.2,
4442
rotation: 30,
45-
isMobile: false
43+
isMobile: false,
4644
});
4745
4846
const containerRef = ref<HTMLDivElement | null>(null);
@@ -69,7 +67,7 @@ interface ExtendMaterialConfig {
6967
fragmentHeader?: string;
7068
material?: any;
7169
}
72-
70+
// @ts-ignore
7371
type ShaderWithDefines = THREE.ShaderLibShader & {
7472
defines?: Record<string, string | number | boolean>;
7573
};
@@ -158,21 +156,25 @@ float cnoise(vec3 P){
158156
return 2.2 * n_xyz;
159157
}
160158
`;
161-
159+
// @ts-ignore
162160
function extendMaterial<T extends THREE.Material = THREE.Material>(
161+
// @ts-ignore
163162
BaseMaterial: new (params?: THREE.MaterialParameters) => T,
164-
cfg: ExtendMaterialConfig
163+
cfg: ExtendMaterialConfig,
164+
// @ts-ignore
165165
): THREE.ShaderMaterial {
166166
const physical = THREE.ShaderLib.physical as ShaderWithDefines;
167167
const { vertexShader: baseVert, fragmentShader: baseFrag, uniforms: baseUniforms } = physical;
168168
const baseDefines = physical.defines ?? {};
169-
169+
// @ts-ignore
170170
const uniforms: Record<string, THREE.IUniform> = THREE.UniformsUtils.clone(baseUniforms);
171171
172172
const defaults = new BaseMaterial(cfg.material || {}) as T & {
173+
// @ts-ignore
173174
color?: THREE.Color;
174175
roughness?: number;
175176
metalness?: number;
177+
// @ts-ignore
176178
envMap?: THREE.Texture;
177179
envMapIntensity?: number;
178180
};
@@ -183,19 +185,29 @@ function extendMaterial<T extends THREE.Material = THREE.Material>(
183185
if ('envMap' in defaults) uniforms.envMap.value = defaults.envMap;
184186
if ('envMapIntensity' in defaults) uniforms.envMapIntensity.value = defaults.envMapIntensity;
185187
188+
// @ts-ignore
186189
Object.entries(cfg.uniforms ?? {}).forEach(([key, u]) => {
187190
uniforms[key] =
188191
u !== null && typeof u === 'object' && 'value' in u
189-
? (u as THREE.IUniform<unknown>)
190-
: (() => { const uniform: THREE.IUniform<unknown> = { value: u }; return uniform; })();
192+
? // @ts-ignore
193+
(u as THREE.IUniform<unknown>)
194+
: (() => {
195+
// @ts-ignore
196+
197+
const uniform: THREE.IUniform<unknown> = { value: u };
198+
return uniform;
199+
})();
191200
});
192201
193202
let vert = `${cfg.header}\n${cfg.vertexHeader ?? ''}\n${baseVert}`;
194203
let frag = `${cfg.header}\n${cfg.fragmentHeader ?? ''}\n${baseFrag}`;
204+
// @ts-ignore
195205
196206
for (const [inc, code] of Object.entries(cfg.vertex ?? {})) {
197207
vert = vert.replace(inc, `${inc}\n${code}`);
198208
}
209+
// @ts-ignore
210+
199211
for (const [inc, code] of Object.entries(cfg.fragment ?? {})) {
200212
frag = frag.replace(inc, `${inc}\n${code}`);
201213
}
@@ -206,7 +218,7 @@ function extendMaterial<T extends THREE.Material = THREE.Material>(
206218
vertexShader: vert,
207219
fragmentShader: frag,
208220
lights: true,
209-
fog: !!cfg.material?.fog
221+
fog: !!cfg.material?.fog,
210222
});
211223
212224
return mat;
@@ -217,7 +229,8 @@ function createStackedPlanesBufferGeometry(
217229
width: number,
218230
height: number,
219231
spacing: number,
220-
heightSegments: number
232+
heightSegments: number,
233+
// @ts-ignore
221234
): THREE.BufferGeometry {
222235
const geometry = new THREE.BufferGeometry();
223236
const numVertices = n * (heightSegments + 1) * 2;
@@ -247,12 +260,12 @@ function createStackedPlanesBufferGeometry(
247260
uvs.set([uvXOffset, uvY + uvYOffset, uvXOffset + 1, uvY + uvYOffset], uvOffset);
248261
249262
if (j < heightSegments) {
250-
const a = vertexOffset;
251-
const b = vertexOffset + 1;
252-
const c = vertexOffset + 2;
253-
const d = vertexOffset + 3;
254-
indices.set([a, b, c, c, b, d], indexOffset);
255-
indexOffset += 6;
263+
const a = vertexOffset;
264+
const b = vertexOffset + 1;
265+
const c = vertexOffset + 2;
266+
const d = vertexOffset + 3;
267+
indices.set([a, b, c, c, b, d], indexOffset);
268+
indexOffset += 6;
256269
}
257270
vertexOffset += 2;
258271
uvOffset += 4;
@@ -298,14 +311,15 @@ const beamMaterial = computed(() =>
298311
return normalize(cross(tangentZ, tangentX));
299312
}`,
300313
fragmentHeader: '',
314+
// @ts-ignore
301315
vertex: {
302316
'#include <begin_vertex>': `transformed.z += getPos(transformed.xyz);`,
303-
'#include <beginnormal_vertex>': `objectNormal = getNormal(position.xyz);`
317+
'#include <beginnormal_vertex>': `objectNormal = getNormal(position.xyz);`,
304318
},
305319
fragment: {
306320
'#include <dithering_fragment>': `
307321
float randomNoise = noise(gl_FragCoord.xy);
308-
gl_FragColor.rgb -= randomNoise / 15. * uNoiseIntensity;`
322+
gl_FragColor.rgb -= randomNoise / 15. * uNoiseIntensity;`,
309323
},
310324
material: { fog: true },
311325
uniforms: {
@@ -316,9 +330,9 @@ const beamMaterial = computed(() =>
316330
uSpeed: { shared: true, mixed: true, linked: true, value: props.speed },
317331
envMapIntensity: 10,
318332
uNoiseIntensity: props.noiseIntensity,
319-
uScale: props.scale
320-
}
321-
})
333+
uScale: props.scale,
334+
},
335+
}),
322336
);
323337
324338
const initThreeJS = () => {
@@ -349,6 +363,7 @@ const initThreeJS = () => {
349363
350364
directionalLight = new THREE.DirectionalLight(new THREE.Color(props.lightColor), 1);
351365
directionalLight.position.set(0, 3, 10);
366+
// @ts-ignore
352367
const shadowCamera = directionalLight.shadow.camera as THREE.OrthographicCamera;
353368
shadowCamera.top = 24;
354369
shadowCamera.bottom = -24;
@@ -450,12 +465,12 @@ watch(
450465
props.speed,
451466
props.noiseIntensity,
452467
props.scale,
453-
props.rotation
468+
props.rotation,
454469
],
455470
() => {
456471
initThreeJS();
457472
},
458-
{ deep: true }
473+
{ deep: true },
459474
);
460475
461476
// 监听 isMobile 变化
@@ -464,7 +479,7 @@ watch(
464479
() => {
465480
controlAnimation();
466481
},
467-
{ immediate: true }
482+
{ immediate: true },
468483
);
469484
470485
onMounted(async () => {
@@ -493,20 +508,21 @@ onMounted(async () => {
493508
}
494509
495510
// 设置滚动时的透明度变化:顶部时不透明度为1,向下滚动时降低到0.1
496-
gsap.fromTo(".beams-container",
511+
gsap.fromTo(
512+
'.beams-container',
497513
{
498514
opacity: 1, // 初始状态:完全不透明
499515
},
500516
{
501517
opacity: 0.1, // 结束状态:几乎透明
502518
scrollTrigger: {
503-
trigger: "body", // 以整个页面作为触发器
504-
start: "top top", // 从页面顶部开始
505-
end: "bottom top", // 到页面底部结束
519+
trigger: 'body', // 以整个页面作为触发器
520+
start: 'top top', // 从页面顶部开始
521+
end: 'bottom top', // 到页面底部结束
506522
scrub: true, // 跟随滚动
507523
invalidateOnRefresh: true, // 刷新时重新计算
508-
}
509-
}
524+
},
525+
},
510526
);
511527
}
512528
});
@@ -527,4 +543,3 @@ onUnmounted(() => {
527543
z-index: -1; /* 确保在其他内容后面 */
528544
}
529545
</style>
530-

0 commit comments

Comments
 (0)