Compare commits

...

123 Commits

Author SHA1 Message Date
Vincent Garreau
d01286d6dc Update README.md 2017-03-25 18:46:21 +01:00
Vincent Garreau
e73faacfa4 Merge pull request #79 from christophersu/fix-readme
Remove duplicate table row from readme
2015-12-09 11:59:57 +01:00
Christopher Su
01ff4a6ef0 Update README.md 2015-11-27 17:23:59 -08:00
Vincent Garreau
22b4986065 Update README.md 2015-09-20 19:53:10 +02:00
Vincent Garreau
90b36f4b55 Update README.md - fix img 2015-09-20 17:40:08 +02:00
Vincent Garreau
20d58078ea Merge pull request #58 from kkirsche/patch-1
Remove moot `version` property from bower.json
2015-06-15 21:23:15 +02:00
Kevin Kirsche
7ed36a461d Remove moot version property from bower.json
Per bower/bower.json-spec@a325da3
2015-06-10 20:43:55 -04:00
Vincent Garreau
cee3b0a3da Merge branch 'dev' 2015-05-10 16:44:18 +02:00
Vincent Garreau
2b16d668ae Merge branch 'dev' 2015-05-10 16:42:52 +02:00
Vincent Garreau
c46ff7a398 Update README.md 2015-05-10 16:38:44 +02:00
Vincent Garreau
b56f5c1832 slash 2015-05-10 13:00:07 +02:00
Vincent Garreau
209117b34b update README 2015-05-10 12:54:47 +02:00
Vincent Garreau
8833f08c48 Merge branch 'dev' 2015-05-10 12:46:12 +02:00
Vincent Garreau
d6089aff46 update README 2015-05-10 12:39:27 +02:00
Vincent Garreau
858d554b2a Merge branch 'master' into dev 2015-05-10 12:36:55 +02:00
Vincent Garreau
172f5c0890 fix for release 2015-05-09 21:03:28 +02:00
Vincent Garreau
ef05b2e1af npm package 2015-05-09 20:44:44 +02:00
Vincent Garreau
acb4f2630d Update README.md 2015-05-09 14:56:47 +02:00
Vincent Garreau
e8f76d5e62 Update README.md 2015-05-09 14:56:26 +02:00
Vincent Garreau
5a03dcceb4 Update LICENSE.md 2015-05-09 14:47:49 +02:00
Vincent Garreau
3e4f236d26 Update LICENSE.md 2015-05-09 14:47:27 +02:00
Vincent Garreau
ccb79aaeff Update README.md 2015-05-09 14:33:01 +02:00
Vincent Garreau
11b1cb05da Update README.md 2015-05-09 14:11:57 +02:00
Vincent Garreau
229567ab53 Update README.md 2015-05-09 14:11:33 +02:00
Vincent Garreau
5e869d0e59 Update README.md 2015-05-09 14:08:59 +02:00
Vincent Garreau
14bf5ad13f Update README.md 2015-05-09 14:07:12 +02:00
Vincent Garreau
c8f5d04cca Update README.md 2015-05-09 14:06:37 +02:00
Vincent Garreau
1d6d392218 Update README.md 2015-05-09 14:02:09 +02:00
Vincent Garreau
438c12d5fd add particles.min.js 2.0.0 2015-05-09 12:02:55 +02:00
Vincent Garreau
677c14cfdc init particles.js 2.0.0 2015-05-09 12:02:07 +02:00
Vincent Garreau
ca71361579 Merge branch 'dev' 2015-05-09 11:58:10 +02:00
Vincent Garreau
873c7bfef1 Merge remote-tracking branch 'origin/dev' into dev
Conflicts:
	README.md
2015-05-09 02:22:45 +02:00
Vincent Garreau
246989f6f2 init particles.js 2.0.0 2015-05-09 02:22:09 +02:00
Vincent Garreau
05c0918a6c Update README.md 2015-05-05 11:07:52 +02:00
Vincent Garreau
c7ca473d09 Update README.md 2015-05-05 11:06:58 +02:00
Vincent Garreau
2425f1c652 Update README.md 2015-05-05 11:05:47 +02:00
Vincent Garreau
ae4f4b0835 support multi canvas / multi particles-js on the same page (dom) 2015-04-12 19:02:59 +02:00
Vincent Garreau
7945e55a8a support all image type (png, jpg, gif...) 2015-04-12 13:57:28 +02:00
Vincent Garreau
50edaaf3f1 particles - add opacity random 2015-04-12 02:03:38 +02:00
Vincent Garreau
b06f7e7818 add animation size particles 2015-04-12 01:24:49 +02:00
Vincent Garreau
01080daa3f rounded linked line + fix onclick event if anim disabled 2015-04-11 23:16:29 +02:00
Vincent Garreau
99b96da44c update color value [single hex, array hex or "random"] 2015-04-11 22:05:42 +02:00
Vincent Garreau
f440a63018 fix order functions 2015-04-11 20:00:43 +02:00
Vincent Garreau
37e0027b4b shape image svg / support opacity 2015-04-11 19:57:59 +02:00
Vincent Garreau
e86e097460 custom shape image (svg or png) 2015-04-11 19:48:17 +02:00
Vincent Garreau
85a93fb8bd new custom shapes: triangle, polygon, star 2015-04-11 15:47:23 +02:00
Vincent Garreau
b3bd42ea04 gem rails assets 2015-03-20 15:16:28 +01:00
Vincent Garreau
baac63556d color_random - update comment 2015-03-12 19:39:02 +01:00
Vincent Garreau
6a2c1d6fac Merge branch 'pr/46' into dev 2015-03-12 19:37:03 +01:00
Calvin Tennant
7620863e16 Opacity 2015-03-09 15:30:15 -04:00
Calvin Tennant
f07b280932 Opacity 2015-03-09 15:27:05 -04:00
Vincent Garreau
5eb25b2928 fix contributor / pr45 2015-03-05 09:10:12 +01:00
Vincent Garreau
5a962ffc0f update / fix PR 2015-03-04 19:42:10 +01:00
Vincent Garreau
6a5859b898 Merge remote-tracking branch 'origin/dev' into dev 2015-03-04 19:37:28 +01:00
Vincent Garreau
ecfb1beebc update 1.1.0 to 1.1.1 2015-03-04 19:37:27 +01:00
Vincent Garreau
4cc1441f16 Merge branch 'pr/45' into dev 2015-03-04 19:34:59 +01:00
Alexandre Rieux
bc5a26a6c6 Improve merge from parameters 2015-03-04 14:27:29 +01:00
Vincent Garreau
a9fe8ea6f3 Update particles.js 2015-02-20 11:56:07 +01:00
Vincent Garreau
06fa60071c Merge branch 'pr/41' into dev
Conflicts:
	README.md
2015-02-20 11:55:33 +01:00
Brandon Dail
c39f2d9a45 Add array selection for color_random
Added ability for Particles.js to accept an array as a value for color_random. If the value is an array it will randomly select an element from the array for the fillStyle. The values must be HEX values at the moment.
2015-02-18 15:30:11 -06:00
Vincent Garreau
80239f6988 add comment 2015-02-16 11:42:36 +01:00
Vincent Garreau
78e7ccc675 add comment 2015-02-16 11:42:08 +01:00
Vincent Garreau
096c07b5e1 update README 2015-02-16 11:41:13 +01:00
Vincent Garreau
046843abbb fix params opacity 2015-02-16 11:37:41 +01:00
Vincent Garreau
27fd772488 Update README.md 2015-02-16 11:31:58 +01:00
Vincent Garreau
88c94f559a fix opacity params 2015-02-16 11:28:44 +01:00
Vincent Garreau
ad6e18b10d fix opacity params 2015-02-16 11:27:44 +01:00
Vincent Garreau
eb31c4d507 update bower 2015-02-16 10:45:06 +01:00
Vincent Garreau
baddb4e9f4 add particles.min 2015-02-16 10:42:53 +01:00
Vincent Garreau
2d84d93f15 update bower 2015-02-16 10:41:23 +01:00
Vincent Garreau
da61f1abcc Merge pull request #40 from VincentGarreau/dev
dev - 1.1.0
2015-02-16 10:27:36 +01:00
Vincent Garreau
fe57d9b2f6 can set opacity with value or object 2015-02-16 10:22:54 +01:00
Vincent Garreau
39c6541424 opacity anim / change default values params 2015-02-16 10:12:03 +01:00
Vincent Garreau
fd550b8000 set release version to v1.1.0 2015-02-16 10:09:07 +01:00
Vincent Garreau
4f5a07e5e2 set condensed_mode to false by default 2015-02-16 09:39:15 +01:00
Vincent Garreau
49b25d71ec demo - add onresize param 2015-02-16 09:38:44 +01:00
Vincent Garreau
2b5eb9fc49 update README 2015-02-16 09:38:24 +01:00
Vincent Garreau
7a22dbec7c fix set param density_auto 2015-02-16 01:16:28 +01:00
Vincent Garreau
8faae82398 set density_auto to false by default 2015-02-16 01:12:16 +01:00
Vincent Garreau
1abda38959 add density_auto param
display nb particles (depending on canvas area)
2015-02-16 01:11:02 +01:00
Vincent Garreau
0fe5021843 add onresize param with bounce/out mode 2015-02-15 23:50:44 +01:00
Vincent Garreau
11f2f51116 remove comment 2015-02-15 23:29:44 +01:00
Vincent Garreau
b47dc6ecf8 add interactivity functions - push + remove 2015-02-15 23:29:01 +01:00
Vincent Garreau
6e09f4d9ee fix interactivity mode if it set to false 2015-02-15 23:18:44 +01:00
Vincent Garreau
0370ad4e86 fix window resize listener 2015-02-15 23:07:45 +01:00
Vincent Garreau
94c0a27882 update param opacity 2015-02-15 19:17:31 +01:00
Vincent Garreau
89492180de particles: add "opacity anim" param 2015-02-15 19:15:11 +01:00
Vincent Garreau
80a9db9fde change background color 2015-02-15 19:15:02 +01:00
Vincent Garreau
31928fd642 Update README.md 2015-02-15 18:13:26 +01:00
Vincent Garreau
c530c42162 Update README.md 2015-02-15 18:09:25 +01:00
Vincent Garreau
785ae4e973 fix destroy function - pJS object 2015-02-15 17:59:53 +01:00
Vincent Garreau
152509892b Merge branch 'pr/36' into dev 2015-02-15 17:58:27 +01:00
Vincent Garreau
59051c9b8d add stats.js + update params 2015-02-15 17:47:39 +01:00
Vincent Garreau
891c83b082 particles: add "color_random" param 2015-02-15 17:40:12 +01:00
Oliganti
efccecdf8d proper removal of pJS to avoid mouse events' errors 2014-12-22 15:15:39 +01:00
Vincent Garreau
71adda9d51 fix triangle positioning 2014-11-20 18:07:18 +01:00
Vincent Garreau
7cb86a0816 update version number 2014-11-20 18:05:47 +01:00
Vincent Garreau
b94d089445 Merge branch 'dev-local' into dev 2014-11-20 18:04:22 +01:00
Vincent Garreau
062b47a066 Merge branch 'pr/20' into dev-local
Conflicts:
	particles.js
2014-11-20 18:04:01 +01:00
Vincent Garreau
97d82786fb add credits comment 2014-11-19 20:36:21 +01:00
Vincent Garreau
b1e99292ff add particles.min.js 2014-11-19 20:35:44 +01:00
Vincent Garreau
efad15eb3b Merge pull request #29 from VincentGarreau/dev
dev - 1.0.3
2014-11-19 20:34:18 +01:00
Vincent Garreau
777e8e3da6 update version number - 1.0.3 2014-11-19 20:33:04 +01:00
Vincent Garreau
63a61b453c fix triangle positioning 2014-11-19 20:27:43 +01:00
Vincent Garreau
28339a7d45 Merge branch 'pr/26' into dev
Conflicts:
	particles.js
	particles.min.js
2014-11-19 20:24:05 +01:00
Vincent Garreau
a86f2b029f fix pixel ratio 2014-11-19 20:20:12 +01:00
Vincent Garreau
f2daa7a9a0 Merge branch 'pr/17' into dev 2014-11-19 20:15:13 +01:00
Vincent Garreau
65f6800a1b update number version 2014-11-19 20:12:50 +01:00
Vincent Garreau
6b724ffa05 fix interactivity on Firefox 2014-11-19 20:12:05 +01:00
Chad Scira
968d40249a fixed triangle positioning issue 2014-11-19 00:12:19 +07:00
as0n
b536c4ddae Used object prototype to define class method. 2014-11-18 02:53:42 +01:00
LevChurakov
609e06c8b0 Remove magic number 2014-11-17 04:32:02 +03:00
Vincent Garreau
b1da10f16f update particles.min.js 2014-11-16 19:19:31 +01:00
Vincent Garreau
04198e139a add conditions 2014-11-16 19:18:39 +01:00
Vincent Garreau
46116efc18 add conditions 2014-11-16 19:17:55 +01:00
Vincent Garreau
028f5e9c80 add credits 2014-11-16 18:36:44 +01:00
Vincent Garreau
36de8d5d37 e.page to e.client 2014-11-16 18:32:36 +01:00
Vincent Garreau
80ace842cd e.page to e.client
fix in case of particles-js element is set to « fixed » with window
scroll
2014-11-16 18:30:58 +01:00
Vincent Garreau
0cc0406dbf delete particles.min.js 2014-11-16 18:00:18 +01:00
Vincent Garreau
514e94eaea fix / on window detect 2014-11-16 18:00:00 +01:00
Vincent Garreau
88d5f02231 fix / on window detect 2014-11-16 17:56:47 +01:00
Vincent Garreau
8e751d8009 Update README.md 2014-11-16 17:19:48 +01:00
Vincent Garreau
57a4c81f7e Update README.md 2014-11-16 16:59:41 +01:00
12 changed files with 2078 additions and 448 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
particles.min.js

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2014, Vincent Garreau
Copyright (c) 2015, Vincent Garreau
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

299
README.md
View File

@ -2,6 +2,20 @@
### A lightweight JavaScript library for creating particles.
------------------------------
### `Demo / Generator`
<a href="http://vincentgarreau.com/particles.js/" target="_blank"><img src="http://vincentgarreau.com/particles.js/assets/img/github-screen.jpg" alt="particles.js generator" /></a>
Configure, export, and share your particles.js configuration on CodePen: <br />
http://vincentgarreau.com/particles.js/
CodePen demo: <br />
http://codepen.io/VincentGarreau/pen/pnlso
-------------------------------
### `Usage`
Load particles.js and configure the particles:
**index.html**
@ -13,82 +27,217 @@ Load particles.js and configure the particles:
**app.js**
```javascript
/* particlesJS('dom-id', params);
/* @dom-id : set the html tag id [string, optional, default value : particles-js]
/* @params: set the params [object, optional, default values : check particles.js] */
/* default dom id (particles-js) */
//particlesJS();
/* config dom id */
//particlesJS('dom-id');
/* config dom id (optional) + config particles params */
particlesJS('particles-js', {
particles: {
color: '#fff',
shape: 'circle', // "circle", "edge" or "triangle"
opacity: 1,
size: 4,
size_random: true,
<<<<<<< HEAD
nb: 100,
=======
nb: 150,
>>>>>>> dev
line_linked: {
enable_auto: true,
distance: 100,
color: '#fff',
opacity: 1,
width: 1,
condensed_mode: {
enable: false,
rotateX: 600,
rotateY: 600
}
},
anim: {
enable: true,
speed: 1
}
},
interactivity: {
enable: true,
mouse: {
<<<<<<< HEAD
distance: 250
=======
distance: 300
>>>>>>> dev
},
detect_on: 'canvas', // "canvas" or "window"
mode: 'grab',
line_linked: {
opacity: .5
},
events: {
onclick: {
<<<<<<< HEAD
push_particles: {
enable: true,
nb: 4
}
}
=======
enable: true,
mode: 'push', // "push" or "remove"
nb: 4
}
>>>>>>> dev
}
},
/* Retina Display Support */
retina_detect: true
/* particlesJS.load(@dom-id, @path-json, @callback (optional)); */
particlesJS.load('particles-js', 'assets/particles.json', function() {
console.log('callback - particles.js config loaded');
});
```
### ***Live Demo***
<a href="http://codepen.io/VincentGarreau/pen/pnlso" target="_blank">CodePen demo</a>
**particles.json**
```javascript
{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 10,
"random": true,
"anim": {
"enable": false,
"speed": 80,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 300,
"color": "#ffffff",
"opacity": 0.4,
"width": 2
},
"move": {
"enable": true,
"speed": 12,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": false,
"mode": "repulse"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 800,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 800,
"size": 80,
"duration": 2,
"opacity": 0.8,
"speed": 3
},
"repulse": {
"distance": 400,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}
```
<a href="http://htmlpreview.github.io/?https://github.com/VincentGarreau/particles.js/blob/master/demo/index.html" target="_blank">GitHub demo</a>
-------------------------------
### `Options`
key | option type / notes | example
----|---------|------
`particles.number.value` | number | `40`
`particles.number.density.enable` | boolean | `true` / `false`
`particles.number.density.value_area` | number | `800`
`particles.color.value` | HEX (string) <br /> RGB (object) <br /> HSL (object) <br /> array selection (HEX) <br /> random (string) | `"#b61924"` <br /> `{r:182, g:25, b:36}` <br /> `{h:356, s:76, l:41}` <br /> `["#b61924", "#333333", "999999"]` <br /> `"random"`
`particles.shape.type` | string <br /> array selection | `"circle"` <br /> `"edge"` <br /> `"triangle"` <br /> `"polygon"` <br /> `"star"` <br /> `"image"` <br /> `["circle", "triangle", "image"]`
`particles.shape.stroke.width` | number | `2`
`particles.shape.stroke.color` | HEX (string) | `"#222222"`
`particles.shape.polygon.nb_slides` | number | `5`
`particles.shape.image.src` | path link <br /> svg / png / gif / jpg | `"assets/img/yop.svg"` <br /> `"http://mywebsite.com/assets/img/yop.png"`
`particles.shape.image.width` | number <br />(for aspect ratio) | `100`
`particles.shape.image.height` | number <br />(for aspect ratio) | `100`
`particles.opacity.value` | number (0 to 1) | `0.75`
`particles.opacity.random` | boolean | `true` / `false`
`particles.opacity.anim.enable` | boolean | `true` / `false`
`particles.opacity.anim.speed` | number | `3`
`particles.opacity.anim.opacity_min` | number (0 to 1) | `0.25`
`particles.opacity.anim.sync` | boolean | `true` / `false`
`particles.size.value` | number | `20`
`particles.size.random` | boolean | `true` / `false`
`particles.size.anim.enable` | boolean | `true` / `false`
`particles.size.anim.speed` | number | `3`
`particles.size.anim.size_min` | number | `0.25`
`particles.size.anim.sync` | boolean | `true` / `false`
`particles.line_linked.enable` | boolean | `true` / `false`
`particles.line_linked.distance` | number | `150`
`particles.line_linked.color` | HEX (string) | `#ffffff`
`particles.line_linked.opacity` | number (0 to 1) | `0.5`
`particles.line_linked.width` | number | `1.5`
`particles.move.enable` | boolean | `true` / `false`
`particles.move.speed` | number | `4`
`particles.move.direction` | string | `"none"` <br /> `"top"` <br /> `"top-right"` <br /> `"right"` <br /> `"bottom-right"` <br /> `"bottom"` <br /> `"bottom-left"` <br /> `"left"` <br /> `"top-left"`
`particles.move.random` | boolean | `true` / `false`
`particles.move.straight` | boolean | `true` / `false`
`particles.move.out_mode` | string <br /> (out of canvas) | `"out"` <br /> `"bounce"`
`particles.move.bounce` | boolean <br /> (between particles) | `true` / `false`
`particles.move.attract.enable` | boolean | `true` / `false`
`particles.move.attract.rotateX` | number | `3000`
`particles.move.attract.rotateY` | number | `1500`
`interactivity.detect_on` | string | `"canvas", "window"`
`interactivity.events.onhover.enable` | boolean | `true` / `false`
`interactivity.events.onhover.mode` | string <br /> array selection | `"grab"` <br /> `"bubble"` <br /> `"repulse"` <br /> `["grab", "bubble"]`
`interactivity.events.onclick.enable` | boolean | `true` / `false`
`interactivity.events.onclick.mode` | string <br /> array selection | `"push"` <br /> `"remove"` <br /> `"bubble"` <br /> `"repulse"` <br /> `["push", "repulse"]`
`interactivity.events.resize` | boolean | `true` / `false`
`interactivity.events.modes.grab.distance` | number | `100`
`interactivity.events.modes.grab.line_linked.opacity` | number (0 to 1) | `0.75`
`interactivity.events.modes.bubble.distance` | number | `100`
`interactivity.events.modes.bubble.size` | number | `40`
`interactivity.events.modes.bubble.duration` | number <br /> (second) | `0.4`
`interactivity.events.modes.repulse.distance` | number | `200`
`interactivity.events.modes.repulse.duration` | number <br /> (second) | `1.2`
`interactivity.events.modes.push.particles_nb` | number | `4`
`interactivity.events.modes.push.particles_nb` | number | `4`
`retina_detect` | boolean | `true` / `false`
-------------------------------
### `Packages install`
##### ***npm***
https://www.npmjs.com/package/particles.js
```
npm install particles.js
```
##### ***Bower***
```
bower install particles.js --save
```
##### ***Rails Assets***
```
gem 'rails-assets-particles.js'
```
##### ***Meteor***
https://atmospherejs.com/newswim/particles
```
meteor add newswim:particles
```
-------------------------------
### `Hosting / CDN`
***Please use this host or your own to load particles.js on your projects***
http://www.jsdelivr.com/#!particles.js

View File

@ -1,7 +1,6 @@
{
"name": "particles.js",
"main": "particles.js",
"version": "1.0.2",
"homepage": "https://github.com/VincentGarreau/particles.js",
"authors": [
"Vincent Garreau <vin.garreau@gmail.com>"

View File

@ -22,19 +22,75 @@ li{list-style:none}
My CSS
========================================================================== */
/* ---- base ---- */
html,body{
width:100%;
height:100%;
background:#000;
background:#111;
}
html{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body{
font:normal 75% Arial, Helvetica, sans-serif;
}
/* remove canvas default margin */
canvas{
display:block;
vertical-align:bottom;
}
#particles-js{
width:100%;
height:100%;
/* ---- stats.js ---- */
.count-particles{
background: #000022;
position: absolute;
top: 48px;
left: 0;
width: 80px;
color: #13E8E9;
font-size: .8em;
text-align: left;
text-indent: 4px;
line-height: 14px;
padding-bottom: 2px;
font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
}
.js-count-particles{
font-size: 1.1em;
}
#stats,
.count-particles{
-webkit-user-select: none;
margin-top: 5px;
margin-left: 5px;
}
#stats{
border-radius: 3px 3px 0 0;
overflow: hidden;
}
.count-particles{
border-radius: 0 0 3px 3px;
}
/* ---- particles.js container ---- */
#particles-js{
width: 100%;
height: 100%;
background-color: #b61924;
background-image: url('');
background-size: cover;
background-position: 50% 50%;
background-repeat: no-repeat;
}

View File

@ -1,18 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>particles.js</title>
<meta name="description" content="particles.js is a lightweight JavaScript library for creating particles.">
<meta name="author" content="Vincent Garreau" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" media="screen" href="css/style.css">
<meta charset="utf-8">
<title>particles.js</title>
<meta name="description" content="particles.js is a lightweight JavaScript library for creating particles.">
<meta name="author" content="Vincent Garreau" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" media="screen" href="css/style.css">
</head>
<body>
<!-- count particles -->
<div class="count-particles">
<span class="js-count-particles">--</span> particles
</div>
<!-- particles.js container -->
<div id="particles-js"></div>
<!-- scripts -->
<script src="../particles.js"></script>
<script src="js/app.js"></script>
<!-- stats.js -->
<script src="js/lib/stats.js"></script>
<script>
var count_particles, stats, update;
stats = new Stats;
stats.setMode(0);
stats.domElement.style.position = 'absolute';
stats.domElement.style.left = '0px';
stats.domElement.style.top = '0px';
document.body.appendChild(stats.domElement);
count_particles = document.querySelector('.js-count-particles');
update = function() {
stats.begin();
stats.end();
if (window.pJSDom[0].pJS.particles && window.pJSDom[0].pJS.particles.array) {
count_particles.innerText = window.pJSDom[0].pJS.particles.array.length;
}
requestAnimationFrame(update);
};
requestAnimationFrame(update);
</script>
</body>
</html>

View File

@ -1,53 +1,133 @@
/* default dom id (particles-js) */
//particlesJS();
/* -----------------------------------------------
/* How to use? : Check the GitHub README
/* ----------------------------------------------- */
/* config dom id */
//particlesJS('dom-id');
/* config dom id (optional) + config particles params */
particlesJS('particles-js', {
particles: {
color: '#fff',
shape: 'circle', // "circle", "edge" or "triangle"
opacity: 1,
size: 4,
size_random: true,
nb: 150,
line_linked: {
enable_auto: true,
distance: 100,
color: '#fff',
opacity: 1,
width: 1,
condensed_mode: {
enable: false,
rotateX: 600,
rotateY: 600
}
},
anim: {
enable: true,
speed: 1
}
},
interactivity: {
enable: true,
mouse: {
distance: 300
},
detect_on: 'canvas', // "canvas" or "window"
mode: 'grab',
line_linked: {
opacity: .5
},
events: {
onclick: {
enable: true,
mode: 'push', // "push" or "remove"
nb: 4
}
}
},
/* Retina Display Support */
retina_detect: true
/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */
/*
particlesJS.load('particles-js', 'particles.json', function() {
console.log('particles.js loaded - callback');
});
*/
/* Otherwise just put the config content (json): */
particlesJS('particles-js',
{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 5,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 6,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "repulse"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true,
"config_demo": {
"hide_card": false,
"background_color": "#b61924",
"background_image": "",
"background_position": "50% 50%",
"background_repeat": "no-repeat",
"background_size": "cover"
}
}
);

149
demo/js/lib/stats.js Normal file
View File

@ -0,0 +1,149 @@
/**
* @author mrdoob / http://mrdoob.com/
*/
var Stats = function () {
var startTime = Date.now(), prevTime = startTime;
var ms = 0, msMin = Infinity, msMax = 0;
var fps = 0, fpsMin = Infinity, fpsMax = 0;
var frames = 0, mode = 0;
var container = document.createElement( 'div' );
container.id = 'stats';
container.addEventListener( 'mousedown', function ( event ) { event.preventDefault(); setMode( ++ mode % 2 ) }, false );
container.style.cssText = 'width:80px;opacity:0.9;cursor:pointer';
var fpsDiv = document.createElement( 'div' );
fpsDiv.id = 'fps';
fpsDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#002';
container.appendChild( fpsDiv );
var fpsText = document.createElement( 'div' );
fpsText.id = 'fpsText';
fpsText.style.cssText = 'color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
fpsText.innerHTML = 'FPS';
fpsDiv.appendChild( fpsText );
var fpsGraph = document.createElement( 'div' );
fpsGraph.id = 'fpsGraph';
fpsGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0ff';
fpsDiv.appendChild( fpsGraph );
while ( fpsGraph.children.length < 74 ) {
var bar = document.createElement( 'span' );
bar.style.cssText = 'width:1px;height:30px;float:left;background-color:#113';
fpsGraph.appendChild( bar );
}
var msDiv = document.createElement( 'div' );
msDiv.id = 'ms';
msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;display:none';
container.appendChild( msDiv );
var msText = document.createElement( 'div' );
msText.id = 'msText';
msText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
msText.innerHTML = 'MS';
msDiv.appendChild( msText );
var msGraph = document.createElement( 'div' );
msGraph.id = 'msGraph';
msGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0f0';
msDiv.appendChild( msGraph );
while ( msGraph.children.length < 74 ) {
var bar = document.createElement( 'span' );
bar.style.cssText = 'width:1px;height:30px;float:left;background-color:#131';
msGraph.appendChild( bar );
}
var setMode = function ( value ) {
mode = value;
switch ( mode ) {
case 0:
fpsDiv.style.display = 'block';
msDiv.style.display = 'none';
break;
case 1:
fpsDiv.style.display = 'none';
msDiv.style.display = 'block';
break;
}
};
var updateGraph = function ( dom, value ) {
var child = dom.appendChild( dom.firstChild );
child.style.height = value + 'px';
};
return {
REVISION: 12,
domElement: container,
setMode: setMode,
begin: function () {
startTime = Date.now();
},
end: function () {
var time = Date.now();
ms = time - startTime;
msMin = Math.min( msMin, ms );
msMax = Math.max( msMax, ms );
msText.textContent = ms + ' MS (' + msMin + '-' + msMax + ')';
updateGraph( msGraph, Math.min( 30, 30 - ( ms / 200 ) * 30 ) );
frames ++;
if ( time > prevTime + 1000 ) {
fps = Math.round( ( frames * 1000 ) / ( time - prevTime ) );
fpsMin = Math.min( fpsMin, fps );
fpsMax = Math.max( fpsMax, fps );
fpsText.textContent = fps + ' FPS (' + fpsMin + '-' + fpsMax + ')';
updateGraph( fpsGraph, Math.min( 30, 30 - ( fps / 100 ) * 30 ) );
prevTime = time;
frames = 0;
}
return time;
},
update: function () {
startTime = this.end();
}
}
};
if ( typeof module === 'object' ) {
module.exports = Stats;
}

116
demo/particles.json Normal file
View File

@ -0,0 +1,116 @@
{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 5,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 6,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "repulse"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true,
"config_demo": {
"hide_card": false,
"background_color": "#b61924",
"background_image": "",
"background_position": "50% 50%",
"background_repeat": "no-repeat",
"background_size": "cover"
}
}

28
package.json Normal file
View File

@ -0,0 +1,28 @@
{
"name": "particles.js",
"version": "2.0.0",
"description": "A lightweight JavaScript library for creating particles",
"homepage": "http://vincentgarreau.com/particles.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/VincentGarreau/particles.js.git"
},
"keywords": [
"particles",
"particle",
"canvas"
],
"author": "Vincent Garreau",
"license": "MIT",
"files": [
"particles.js",
"particles.min.js"
],
"bugs": {
"url": "https://github.com/VincentGarreau/particles.js/issues"
},
"homepage": "https://github.com/VincentGarreau/particles.js"
}

File diff suppressed because it is too large Load Diff

7
particles.min.js vendored

File diff suppressed because one or more lines are too long