-
-
Notifications
You must be signed in to change notification settings - Fork 4
Document is not defined #112
Description
Details
Details
Description:
I'm encountering an error with particle rendering in an Angular 18 environment. Despite having the error, the particles are rendering, but it would be nicer not having that error
Steps to Reproduce:
Set up an Angular 18 project environment.
Integrate particle rendering functionality.
Environment:
Angular CLI: 18.0.2
Node: 18.19.33
TS 5.4.5
OS: macOS x64
Angular: 17.3.0
... animations, cdk, common, compiler, compiler-cli, core, forms
... material, platform-browser, platform-browser-dynamic, router
Package Version
@angular-devkit/build-angular@18.0.2
@angular/animations@18.0.1
@angular/cli@18.0.2
@angular/common@18.0.1
@angular/compiler-cli@18.0.1
@angular/compiler@18.0.1
@angular/core@18.0.1
@angular/forms@18.0.1
@angular/platform-browser-dynamic@18.0.1
@angular/platform-browser@18.0.1
@angular/platform-server@18.0.1
@angular/router@18.0.1
@angular/ssr@18.0.2
Particle rendering library/version: @tsparticles/angular
Additional Information:
These are the libraries and versions used:
@tsparticles/angular@3.0.0
@tsparticles/engine@3.4.0
@tsparticles/slim@3.4.0
My component:
import { AfterViewInit, Component, Inject, PLATFORM_ID } from '@angular/core';
import {
MoveDirection,
OutMode,
CollisionMode,
LimitMode,
DestroyType,
AnimationMode,
StartValueType,
InteractivityDetect,
DivType,
PixelMode,
Move,
} from '@tsparticles/engine';
import { NgParticlesService, NgxParticlesModule } from '@tsparticles/angular';
import { loadSlim } from '@tsparticles/slim';
import { isPlatformBrowser } from '@angular/common';
@Component({
selector: 'app-home',
standalone: true,
imports: [NgxParticlesModule],
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss'],
})
export class HomeComponent implements AfterViewInit {
id = 'tsparticles';
particlesOptions = {
autoPlay: true,
background: {
color: {
value: '#11294D',
},
opacity: 1,
},
clear: true,
delay: 0,
fullScreen: {
enable: true,
zIndex: 0,
},
detectRetina: true,
duration: 0,
fpsLimit: 120,
interactivity: {
detectsOn: InteractivityDetect.window,
events: {
onClick: {
enable: false,
mode: 'push',
},
onDiv: {
enable: false,
type: DivType.circle,
},
onHover: {
enable: true,
mode: 'bubble',
parallax: {
enable: false,
force: 2,
smooth: 10,
},
},
resize: {
delay: 0.5,
enable: true,
},
},
modes: {
trail: {
delay: 1,
pauseOnStop: false,
quantity: 1,
},
attract: {
distance: 200,
duration: 0.4,
easing: 'ease-out-quad',
factor: 1,
maxSpeed: 30,
speed: 0.3,
},
bounce: {
distance: 200,
},
bubble: {
distance: 400,
duration: 2,
mix: true,
opacity: 0.8,
color: {
value: '#ff0000',
},
size: 40,
divs: {
distance: 200,
duration: 0.4,
mix: false,
},
},
connect: {
distance: 80,
links: {
opacity: 0.5,
},
radius: 60,
},
grab: {
distance: 400,
links: {
blink: false,
consent: false,
opacity: 1,
},
},
push: {
default: true,
quantity: 4,
},
remove: {
quantity: 2,
},
repulse: {
distance: 200,
duration: 0.4,
factor: 100,
speed: 1,
maxSpeed: 30,
easing: 'ease-out-quad',
divs: {
distance: 200,
duration: 0.4,
factor: 100,
speed: 1,
maxSpeed: 30,
easing: 'ease-out-quad',
selectors: {},
},
},
slow: {
factor: 3,
radius: 200,
},
light: {
area: {
gradient: {
start: {
value: '#ffffff',
},
stop: {
value: '#000000',
},
},
radius: 1000,
},
shadow: {
color: {
value: '#000000',
},
length: 2000,
},
},
},
},
particles: {
bounce: {
horizontal: {
value: 1,
},
vertical: {
value: 1,
},
},
collisions: {
absorb: {
speed: 2,
},
bounce: {
horizontal: {
value: 1,
},
vertical: {
value: 1,
},
},
enable: false,
maxSpeed: 30,
mode: CollisionMode.bounce,
overlap: {
enable: true,
retries: 0,
},
},
color: {
value: '#f56e0f',
animation: {
h: {
count: 0,
enable: false,
speed: 1,
decay: 0,
delay: 0,
sync: true,
offset: 0,
},
s: {
count: 0,
enable: false,
speed: 1,
decay: 0,
delay: 0,
sync: true,
offset: 0,
},
l: {
count: 0,
enable: false,
speed: 1,
decay: 0,
delay: 0,
sync: true,
offset: 0,
},
},
},
effect: {
close: true,
fill: true,
},
move: {
angle: {
offset: 0,
value: 90,
},
attract: {
distance: 200,
enable: false,
rotate: {
x: 3000,
y: 3000,
},
},
center: {
x: 50,
y: 50,
mode: PixelMode.percent,
radius: 0,
},
decay: 0,
direction: MoveDirection.none,
drift: 0,
enable: true,
gravity: {
acceleration: 9.81,
enable: false,
inverse: false,
maxSpeed: 50,
},
path: {
clamp: true,
delay: {
value: 0,
},
enable: false,
},
outModes: {
default: OutMode.out,
},
random: false,
size: false,
speed: 5,
spin: {
acceleration: 0,
enable: false,
},
straight: false,
trail: {
enable: false,
length: 10,
fill: {},
},
vibrate: false,
warp: false,
},
number: {
density: {
enable: true,
width: 1920,
height: 1080,
},
limit: {
mode: LimitMode.delete,
value: 0,
},
value: 6,
},
opacity: {
value: {
min: 0.3,
max: 0.7,
},
animation: {
count: 0,
enable: false,
speed: 2,
decay: 0,
delay: 0,
sync: false,
mode: AnimationMode.auto,
startValue: StartValueType.random,
destroy: DestroyType.none,
},
},
reduceDuplicates: false,
shadow: {
blur: 0,
color: {
value: '#000',
},
enable: false,
offset: {
x: 0,
y: 0,
},
},
shape: {
close: true,
fill: true,
options: {
polygon: {
sides: 6,
},
},
type: 'polygon',
},
size: {
value: {
min: 100,
max: 150,
},
animation: {
count: 0,
enable: false,
speed: 3,
decay: 0,
delay: 0,
sync: false,
mode: AnimationMode.auto,
startValue: StartValueType.random,
destroy: DestroyType.none,
},
},
stroke: {
width: 0,
},
zIndex: {
value: 0,
opacityRate: 1,
sizeRate: 1,
velocityRate: 1,
},
destroy: {
bounds: {},
mode: 'none',
split: {
count: 1,
factor: {
value: 3,
},
rate: {
value: {
min: 4,
max: 9,
},
},
sizeOffset: true,
},
},
roll: {
darken: {
enable: false,
value: 0,
},
enable: false,
enlighten: {
enable: false,
value: 0,
},
mode: 'vertical',
speed: 25,
},
tilt: {
value: 0,
animation: {
enable: false,
speed: 0,
decay: 0,
sync: false,
},
direction: -90,
enable: false,
},
twinkle: {
lines: {
enable: false,
frequency: 0.05,
opacity: 1,
},
particles: {
enable: false,
frequency: 0.05,
opacity: 1,
},
},
wobble: {
distance: 5,
enable: false,
speed: {
angle: 50,
move: 10,
},
},
life: {
count: 0,
delay: {
value: 0,
sync: false,
},
duration: {
value: 0,
sync: false,
},
},
rotate: {
value: 0,
animation: {
enable: false,
speed: 0,
decay: 0,
sync: false,
},
direction: -90,
path: false,
},
orbit: {
animation: {
count: 0,
enable: false,
speed: 1,
decay: 0,
delay: 0,
sync: false,
},
enable: false,
opacity: 1,
rotation: {
value: 45,
},
width: 1,
},
links: {
blink: false,
color: {
value: '#ffffff',
},
consent: false,
distance: 200,
enable: false,
frequency: 1,
opacity: 1,
shadow: {
blur: 5,
color: {
value: '#000',
},
enable: false,
},
triangles: {
enable: false,
frequency: 1,
},
width: 2,
warp: false,
},
repulse: {
value: 0,
enabled: false,
distance: 1,
duration: 1,
factor: 1,
speed: 1,
},
},
pauseOnBlur: true,
pauseOnOutsideViewport: true,
smooth: false,
zLayers: 100,
name: 'Bubble',
motion: {
disable: false,
reduce: {
factor: 4,
value: true,
},
},
};
constructor(
private readonly ngParticlesService: NgParticlesService,
@Inject(PLATFORM_ID) private platformId: Object
) {}
ngAfterViewInit(): void {
if (isPlatformBrowser(this.platformId)) {
import('@tsparticles/angular').then(() => {
this.ngParticlesService.init(async (engine) => {
await loadSlim(engine);
});
});
}
}
}The HTML is just
<ngx-particles [id]="id" [options]="particlesOptions"></ngx-particles>Thanks in advance to anyone willing to help!
