@@ -15,16 +15,24 @@ function launchParticlesJS(tag_id, params){
15
15
h : document . querySelector ( '#' + tag_id + ' > canvas' ) . offsetHeight
16
16
} ,
17
17
particles : {
18
- color_hex : '#fff' ,
18
+ color : '#fff' ,
19
19
shape : 'circle' ,
20
20
opacity : 1 ,
21
21
size : 2.5 ,
22
22
size_random : true ,
23
23
nb : 200 ,
24
- array : [ ] ,
24
+ line_linked : {
25
+ enable : true ,
26
+ distance : 100 ,
27
+ color : '#fff' ,
28
+ opacity : 1 ,
29
+ width : 1
30
+ } ,
25
31
anim : {
32
+ enable : false ,
26
33
speed : 1
27
- }
34
+ } ,
35
+ array : [ ]
28
36
} ,
29
37
retina_detect : true ,
30
38
interactivity : { } ,
@@ -34,12 +42,19 @@ function launchParticlesJS(tag_id, params){
34
42
/* params settings */
35
43
if ( params ) {
36
44
if ( params . particles ) {
37
- if ( params . particles . color_hex ) pJS . particles . color_hex = params . particles . color_hex ;
45
+ if ( params . particles . color ) pJS . particles . color = params . particles . color ;
38
46
if ( params . particles . shape ) pJS . particles . shape = params . particles . shape ;
39
47
if ( params . particles . opacity ) pJS . particles . opacity = params . particles . opacity ;
40
48
if ( params . particles . size ) pJS . particles . size = params . particles . size ;
41
49
if ( params . particles . size_random == false ) pJS . particles . size_random = params . particles . size_random ;
42
50
if ( params . particles . nb ) pJS . particles . nb = params . particles . nb ;
51
+ if ( params . particles . line_linked ) {
52
+ if ( params . particles . line_linked . enable == false ) pJS . particles . line_linked . enable = params . particles . line_linked . enable ;
53
+ if ( params . particles . line_linked . distance ) pJS . particles . line_linked . distance = params . particles . line_linked . distance ;
54
+ if ( params . particles . line_linked . color ) pJS . particles . line_linked . color = params . particles . line_linked . color ;
55
+ if ( params . particles . line_linked . opacity ) pJS . particles . line_linked . opacity = params . particles . line_linked . opacity ;
56
+ if ( params . particles . line_linked . width ) pJS . particles . line_linked . width = params . particles . line_linked . width ;
57
+ }
43
58
if ( params . particles . anim ) {
44
59
if ( params . particles . anim . speed ) pJS . particles . anim . speed = params . particles . anim . speed ;
45
60
}
@@ -48,7 +63,8 @@ function launchParticlesJS(tag_id, params){
48
63
}
49
64
50
65
/* convert hex colors to rgb */
51
- pJS . particles . color_rgb = hexToRgb ( pJS . particles . color_hex ) ;
66
+ pJS . particles . color_rgb = hexToRgb ( pJS . particles . color ) ;
67
+ pJS . particles . line_linked . color_rgb_line = hexToRgb ( pJS . particles . line_linked . color ) ;
52
68
53
69
/* detect retina */
54
70
if ( pJS . retina_detect ) {
@@ -57,6 +73,8 @@ function launchParticlesJS(tag_id, params){
57
73
pJS . canvas . w = pJS . canvas . el . offsetWidth * 2 ;
58
74
pJS . canvas . h = pJS . canvas . el . offsetHeight * 2 ;
59
75
pJS . particles . anim . speed = pJS . particles . anim . speed * 2 ;
76
+ pJS . particles . line_linked . distance = pJS . particles . line_linked . distance * 2 ;
77
+ pJS . particles . line_linked . width = pJS . particles . line_linked . width * 2 ;
60
78
}
61
79
} ;
62
80
@@ -173,21 +191,31 @@ function launchParticlesJS(tag_id, params){
173
191
else if ( p . x - p . radius < 0 ) p . x = pJS . canvas . w - p . radius ;
174
192
if ( p . y + p . radius > pJS . canvas . h ) p . y = p . radius ;
175
193
else if ( p . y - p . radius < 0 ) p . y = pJS . canvas . h - p . radius ;
194
+
195
+ /* Check distance between each particle and mouse position */
196
+ for ( var j = i + 1 ; j < pJS . particles . array . length ; j ++ ) {
197
+ var p2 = pJS . particles . array [ j ] ;
198
+ //distanceParticleMouse(p, p2);
199
+ if ( pJS . particles . line_linked . enable ) {
200
+ distanceParticles ( p , p2 ) ;
201
+ }
202
+ }
176
203
}
177
204
} ;
178
205
179
206
pJS . fn . particlesDraw = function ( ) {
180
207
/* clear canvas */
181
208
pJS . canvas . ctx . clearRect ( 0 , 0 , pJS . canvas . w , pJS . canvas . h ) ;
182
209
210
+ /* move particles */
211
+ pJS . fn . particlesAnimate ( ) ;
212
+
183
213
/* draw each particle */
184
214
for ( var i = 0 ; i < pJS . particles . array . length ; i ++ ) {
185
215
var p = pJS . particles . array [ i ] ;
186
216
p . draw ( 'rgba(' + p . color . r + ',' + p . color . g + ',' + p . color . b + ',' + p . opacity + ')' ) ;
187
217
}
188
-
189
- /* move particles */
190
- pJS . fn . particlesAnimate ( ) ;
218
+
191
219
} ;
192
220
193
221
@@ -224,6 +252,35 @@ window.requestAnimFrame = (function(){
224
252
} ;
225
253
} ) ( ) ;
226
254
255
+ function distanceParticles ( p1 , p2 ) {
256
+
257
+ var dist ,
258
+ dx = p1 . x - p2 . x ;
259
+ dy = p1 . y - p2 . y ;
260
+ dist = Math . sqrt ( dx * dx + dy * dy ) ;
261
+
262
+ /* Check distance between particle and mouse mos */
263
+ if ( dist <= pJS . particles . line_linked . distance ) {
264
+ // Draw the line
265
+ var color_line = pJS . particles . line_linked . color_rgb_line ;
266
+ pJS . canvas . ctx . beginPath ( ) ;
267
+ pJS . canvas . ctx . strokeStyle = 'rgba(' + color_line . r + ',' + color_line . g + ',' + color_line . b + ',' + ( pJS . particles . line_linked . opacity - dist / pJS . particles . line_linked . distance ) + ')' ;
268
+ pJS . canvas . ctx . moveTo ( p1 . x , p1 . y ) ;
269
+ pJS . canvas . ctx . lineTo ( p2 . x , p2 . y ) ;
270
+ pJS . canvas . ctx . lineWidth = pJS . particles . line_linked . width ;
271
+ pJS . canvas . ctx . stroke ( ) ;
272
+ pJS . canvas . ctx . closePath ( ) ;
273
+
274
+ // Acceleration
275
+ /* var ax = dx/65000,
276
+ ay = dy/65000;
277
+ p1.vx -= ax;
278
+ p1.vy -= ay;
279
+ p2.vx += ax;
280
+ p2.vy += ay; */
281
+ }
282
+ }
283
+
227
284
function hexToRgb ( hex ) {
228
285
// By Tim Down - http://stackoverflow.com/a/5624139/3493650
229
286
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
0 commit comments