
CodePenで公開されている、JavaScriptやCSSで作られたパーティクルアニメーション・エフェクトのアイデアを19個セレクトしました。Canvas APIのみで構築したシンプルなネットワーク系から、Three.jsを使った3D表現、SASSだけで実現した純CSS実装、さらにテキストをパーティクルで描き出す高度な演出まで、幅広いバリエーションを集めています。各スニペットには実装のポイントも添えているので、どんな仕組みで動いているのか把握しやすくなっています。気になる表現が見つかったら、実際のサイト制作の参考にしてみてください。
パーティクルアニメーション・エフェクトのアイデア
Particles Random Animation in Canvas
Canvas APIでランダムに動くパーティクルと、近距離の粒子間を結ぶラインのアニメーション
See the Pen Particles Random Animation in Canvas by J.K.Bi (@jkiss) on CodePen.
- Author : J.K.Bi
- Link : CodePen – Demo
💡 実装のポイント
粒子の本数は冒頭のBALL_NUM = 30で制御。粒子間の接続ライン描画はrenderLines()内でdis_limit = 260(px)を閾値に、距離に応じたアルファ値rgba(150,150,150,α)で引かれている。マウス追従はcanvas.addEventListener('mouseenter')でmouse_ballオブジェクトをボール配列に追加するシンプルな仕組みで、mouseleave時に除去される。外部ライブラリはjQuery(CDN)のみ。
Canvas Particle Animation
プラグイン設計のパーティクルネットワーク。速度・密度・インタラクティブ性をオプションで一括制御
See the Pen Canvas Particle Animation by Julian Laval (@JulianLaval) on CodePen.
- Author : Julian Laval
- Link : CodePen – Demo
💡 実装のポイントnew ParticleNetwork(canvasDiv, options)の1行で起動できるモジュール構成。optionsオブジェクトのparticleColor・background・speed(”fast”/”slow”/”medium”/”none”)・density(”high”/”low”/数値)の4項目だけでカスタマイズが完結する。interactive: trueにするとマウス位置に追従するインタラクティブ粒子が1つ追加され、クリック時にランダム速度で弾き飛ぶ動作も内蔵されている。
Background-animation particle
マウスに近い粒子が発光するスパイダーウェブ型パーティクル背景。背景画像と組み合わせた実用的なヒーロー演出
See the Pen Background-animation particle by Jahid Hasan (@codewithJahid) on CodePen.
- Author : Jahid Hasan
- Link : CodePen – Demo
💡 実装のポイント
グリッド状に配置した400点弱のポイントに対して、各点の近傍5点を事前計算してp1.closest = closestに格納しておく設計。マウス位置との距離(二乗距離で判定)に応じてpoints[i].activeを0〜0.3に段階設定し、その値をラインとサークルのアルファ値に直接使う。アニメーションはTweenMax(GSAP)のTweenLite.toでポイントを揺らす仕組み。外部依存はjQuery・TweenMaxの2本。
Dynamic Twinkling Particle System | Vanilla JS
パーティクルがマウスに引き寄せられ、クリックで花火爆発が起きる多機能なVanilla JSパーティクルシステム
See the Pen Dynamic Twinkling Particle System | Vanilla JS by MOZZARELLA (@TheMOZZARELLA) on CodePen.
- Author : MOZZARELLA
- Link : CodePen – Demo
💡 実装のポイント
通常粒子・花火粒子・ダスト粒子・リップルを別クラスで管理し、描画ループでまとめて処理する構成。粒子間の接続ライン描画は空間をグリッド(gridSize = 120)で区画化し、隣接セル内の粒子同士のみ距離チェックする最適化が施されている。画面サイズに応じてadjustParticleCount()で自動的に粒子数が段階調整されるため、モバイル環境での負荷も考慮されている。外部ライブラリ不使用のピュアVanilla JS。
Gravitational Field
電荷のプラス/マイナスがランダムに反転し続ける重力場シミュレーション。有機的な群れの動きが印象的
See the Pen Gravitational Field by Justin Windle (@soulwire) on CodePen.
- Author : Justin Windle
- Link : CodePen – Demo
💡 実装のポイント
CoffeeScriptで記述されたPen。各粒子にcharge(+1 or -1)とmass(0.5〜8の乱数)を持たせ、粒子ペアごとにGRAVITY * a.mass * b.mass / dSqで引力/斥力を計算するn体シミュレーション構成。フレームごとに8%の確率でa.chargeが反転するため挙動が常に変化する。FRICTION = 0.75で速度を減衰させ、TAIL_LENGTH = 12フレーム分の軌跡を描画。描画・アニメーション管理にsketch.jsを外部読み込みで使用。コンパイル後のCSS/JSで動作確認する場合は「View Compiled」を使用。
Background Particle Three js
Three.jsで2万点のパーティクルを3D空間に配置し、マウス操作で視点が変化するクラウドアニメーション
See the Pen Background Particle Three js by Reksa Andhika (@reksaandhika) on CodePen.
- Author : Reksa Andhika
- Link : CodePen – Demo
💡 実装のポイントTHREE.Geometryに2万頂点をランダム配置し、サイズの異なる5段階のTHREE.PointCloudMaterialを持つPointCloudを5つ重ねて奥行き感を演出する構成。materials[i].color.setHSL(h, color[1], color[2])で時間軸に応じた色相シフトが行われる。THREE.Geometry・THREE.PointCloudはThree.js r71相当の旧API(現行はBufferGeometry/Points)なので最新バージョンでは動作しない点に注意。外部依存はThree.js(r71)・jQuery・Stats.js。
Interactive Particles Effect
マウス接近でパーティクルが膨らむインタラクティブなキャンバスアニメーション。背景カラーもアニメーション
See the Pen Interactive Particles Effect by Manoj Bahuguna (@ManojBahuguna) on CodePen.
- Author : Manoj Bahuguna
- Link : CodePen – Demo
💡 実装のポイントCircleクラスとParticlesクラスの2層構造で設計されており、new Particles(canvas.width/2, 1, 50, -3, 3, 300, [...colors], canvas)の1行でシステム全体を初期化できる。各サークルはrGrow距離内にマウスが入るとrExtraを+3ずつ増やして膨張し、離れると-1ずつ縮小する仕組み。粒子数をcanvas.width/2としているため画面幅に応じて自動スケールする。カラーは配列でまとめて渡し、生成時にランダム選択。外部依存なし。
Floating Particles
TypeScriptクラスで設計されたシンプルな浮遊パーティクルシステム。寿命・速度・直径をオブジェクトで設定可能
See the Pen Floating Particles by Aneks (@Aneks) on CodePen.
- Author : Aneks
- Link : CodePen – Demo
💡 実装のポイント
TypeScriptプリプロセッサを使用(CodePen上では「View Compiled JavaScript」で変換後のJSを確認可能)。ParticleSystemクラスにammount・diameter・life・speedを設定する設計で、各パーティクルはsetIntervalで自律的に位置を更新し、lifeが尽きるとparticlesマップから自動削除される。MapでIDキー管理しているため追加・削除が安全。onresizeでシステムを再初期化する処理も組み込み済み。外部依存なし。
Shimmer Effect
パーリンノイズをCSSマスクに適用して波打つシマー(きらめき)アニメーションを生成するジェネレーター
See the Pen Shimmer Effect by Josh Miller (@jshmllr) on CodePen.
💡 実装のポイント
Canvasに等間隔で描いたランダム透明度のドット(またはスクエア)を素地として、PerlinNoiseクラスで生成したシームレスなノイズ画像をCSSmask-imageに適用し、animation: moveMask Xms linear infiniteで横スクロールさせることでシマー効果を実現。マスクサイズはmaskSize: 300% 100%で広げてシームレスループを担保。パーティクルの形状・サイズ・速度・コントラスト・カラーをTweakpane UIでリアルタイム調整できる。ESM経由でtweakpane@4.0.4をimport。
Threejs Particle Explosion
Three.jsで1000個のパーティクルが爆発展開するクリックインタラクション。クリックごとに新たな爆発を生成
See the Pen Threejs Particle Explosion by Xanmia (@Xanmia) on CodePen.
- Author : Xanmia
- Link : CodePen – Demo
💡 実装のポイントExplodeAnimation(x, y)コンストラクタで1000頂点を指定座標に集め、dirs配列に各頂点のランダム方向速度を格納する。update()では毎フレームparticle.x/y/z += dirs[pCount].x/y/zで各頂点を個別に展開し、this.object.geometry.verticesNeedUpdate = trueで再描画をThree.jsに通知する旧API構成。Three.js r61を使用しており、THREE.ParticleBasicMaterial・THREE.ParticleSystemは現行版ではPointsMaterial・Pointsに改名されているため移植時は読み替えが必要。
THREE.js PointCloud
「宇宙船」「噴水」「三角関数グリッド」「幽霊」の4モードを切り替えられるThree.jsパーティクルショーケース
See the Pen THREE.js PointCloud by Matthew Chase (@antishow) on CodePen.
- Author : Matthew Chase
- Link : CodePen – Demo
💡 実装のポイント
各モードの挙動をSETTINGS配列のspawnBehavior(初期配置)・frameBehavior(毎フレームの頂点更新)・sceneFrameBehavior(カメラ操作)の3関数に分けて定義するデータ駆動設計。「三角関数グリッド」モードではTHREE.VertexColorsを使い頂点ごとにsetHSL()で色付けし、colorsNeedUpdate = trueで再描画する。「幽霊」モードはブラウン運動+中心への微弱引力を組み合わせた動きで、スプライト画像をPointCloudMaterialのmapに設定。外部依存はThree.js・lodash・animation-controller。
Multicolored Particle System Three.js WebGL GSAP GLSL
Three.js + GSAP + カスタムGLSLシェーダーで作る球面状の多色パーティクル。マウス・タッチで回転するインタラクション付き
See the Pen Multicolored Particle System Three.js WebGL GSAP GLSL by Gemma Elizabeth (@LadyHolz) on CodePen.
- Author : Gemma Elizabeth
- Link : CodePen – Demo
💡 実装のポイント
1600個の頂点を球面座標(theta・phi)からXYZ変換してTHREE.BufferGeometryに格納し、geometry.setAttribute('customColor', ...)で各頂点の色をGLSLへ渡すTHREE.ShaderMaterial構成。頂点シェーダーでattribute vec3 customColorを受け取りvarying vec3 vColorでフラグメントシェーダーへ受け渡す基本的なカスタムシェーダーパターン。GSAPのgsap.to(particles.rotation, ...)でマウス移動に滑らかに追従させ、スケールのyoyo(往復)アニメーションも別タイムラインで並走させている。外部依存はThree.js r122・GSAP。
Foo Particles
三角関数を使ったsin波ベースの万華鏡的パーティクル。時間経過とともに幾何学模様が変化し続ける
See the Pen Foo Particles by Tiffany Rayside (@tmrDevelops) on CodePen.
- Author : Tiffany Rayside
- Link : CodePen – Demo
💡 実装のポイント
わずか数行のシンプルな構造が特徴的なPen。各フレームでfoo = Math.sin(t) * 2 * Math.PIを算出し、400点の描画座標をr = 400 * Math.sin(i * foo)・x = Math.sin(i) * r + 中央x・y = Math.cos(i) * r + 中央yで決定する1ループ完結の構成。tを0.000005ずつ増やすことで模様が極めてゆっくり変化する。$.fillStyle = 'hsla('+i+12+',100%,60%,1)'でiに連動した色相を付けており、globalCompositeOperationの切り替えでトレイル効果を演出。外部依存なし。
SASS only – Random particles animation
JavaScriptを一切使わず、SASSのループと乱数関数だけで実装したランダムパーティクルアニメーション
See the Pen SASS only – Random particles animation by Rémi Denimal (@remid) on CodePen.
- Author : Rémi Denimal
- Link : CodePen – Demo
💡 実装のポイント
HTMLはPugで- (1..200).each do |i|ループにより200個の.particle要素を生成し、SASS側の@for $i from 1 through 400ループで:nth-child(#{$i})ごとにrandom()でサイズ・速度・遅延・透明度・アニメーション種別を個別設定する構成。$anims: float, floatReverse, float2, floatReverse2の4パターンをランダムに選択することで不規則な揺れを実現。背景にはfilter: url('#goo')でSVG feMorphologyを適用し、粒子が近接すると結合するゴーイー(ぬめり)効果を付与している点も見どころ。SASSビルド環境が必要なのでCodePenの「View Compiled CSS」でCSS確認を。
#webdev series – Particle text animation #updated
テキスト形状から発生したパーティクルが分散・再集合を繰り返す粒子テキストアニメーション
See the Pen #webdev series – Particle text animation #updated by Hendry Sadrak (@hendrysadrak) on CodePen.
- Author : Hendry Sadrak
- Link : CodePen – Demo
💡 実装のポイント
オフスクリーンCanvasに大きなフォントでテキストを描き、ctx.getImageDataでアルファチャンネルを読み取って透明でないピクセル座標をParticleのstartPosとして登録する古典的なテキストパーティクル手法。各粒子はlifeフレーム(最大300)を使い切ると自動リセットされ、テキストの輪郭に常に粒子が集まる。FRICT = 0.98の摩擦係数で速度を減衰させ、加速度のa.x/y = (random()-0.5)*0.8で微細なランダムウォークを付与。高速乱数ライブラリ(fastrandom)がインライン埋め込みされている。CSSプリプロセッサはSCSSだがスタイル自体はシンプル。
Text to particles
入力フィールドのテキストをリアルタイムにパーティクルで描画。マウスで粒子を吹き飛ばすインタラクション付き
See the Pen Text to particles by Louis Hoebregts (@Mamboleoo) on CodePen.
- Author : Louis Hoebregts
- Link : CodePen – Demo
💡 実装のポイント
テキストのサンプリングはwidth/150刻みでピクセルスキャンし、アルファ値150以上の座標にnew Particle(x, y)を生成する構成。各粒子は加速度・速度・摩擦(this.friction = random()*0.05 + 0.94)を持ち、目標座標へ引き寄せる力(accX = (dest.x - x)/1000)でゆっくり収束する。マウスがradius*70ピクセル以内に入ると反発力を加算。クリックでradius(1〜4)を切り替えることで反発範囲を変更できる。テキスト変更はkeyupイベントでリアルタイム再スキャン。外部依存なし。
Text particle
フローフィールド(パーリンノイズ場)と重力を組み合わせたテキストパーティクル。GUIでリアルタイムにパラメータ調整可能
See the Pen Text particle by Tibo (@Gthibaud) on CodePen.
- Author : Tibo
- Link : CodePen – Demo
💡 実装のポイント
テキストスキャン後に画面をグリッドに分割し、各セルにnoise(i)*TWO_PIで角度を格納したフローフィールド(fieldオブジェクト)を事前生成。描画ループで各粒子の現在座標からセルキー(${x - x%fieldStep}-${y - y%fieldStep})を算出してフィールド角度を取得し、p5.Vector.fromAngle(angle, system.flow)で力を加算する。重力方向・強度もベクトルで制御可能。外部依存はp5.js・dat.GUI・カスタムペン(Gthibaud/dybzvNwのCanvasユーティリティ)の3本。
cloudy text
テキスト形状にパーティクルが群がり、文字輪郭に沿って球が浮き上がるクラウドテキスト効果
See the Pen cloudy text by Andy Lindemann (@AndyTheGiant) on CodePen.
- Author : Andy Lindemann
- Link : CodePen – Demo
💡 実装のポイント
2500個の粒子が自由にバウンドしながら、現在座標のピクセルがmap[~~y * width + ~~x]でテキスト領域内かを毎フレーム参照する構成。領域内ならばthis.rを最大12まで+1ずつ増やして球が膨張し、領域外では-1ずつ縮小する。描画は2パス構成で、1パス目(影あり)を灰色で、2パス目(影なし)を白で描くことで内部のハイライト効果を演出している。makeMap(text)でオフスクリーンCanvasにフォントサイズ300pxで描いたテキストのピクセルデータを取得してmap配列に展開する。外部依存なし。
Particle Text Clock – v2
現在時刻をパーティクルで表示するリアルタイム時計。秒更新のたびに1/3の粒子が弾き飛ばされ再集合する
See the Pen Particle Text Clock – v2 by Alca (@Alca) on CodePen.
- Author : Alca
- Link : CodePen – Demo
💡 実装のポイント
PugプリプロセッサとBabel+SCSSを使用した構成。p5.jsのroboto.textToPoints()で数字・コロンの文字アウトライン座標を事前計算し(renderCharacter())、時刻が変わるたびにtextPoints配列を差し替える設計。粒子は独自のParticleクラスでattractTo(textPoint)メソッドが目標ポイントへの速度ベクトルを加算し、friction = 0.75で素早く収束させる。ctx.beginPath()を1フレームに1回開いてすべての粒子を1パスでarc()し、ctx.fill()を1回で処理するバッチ描画でパフォーマンスを確保している。外部依存はp5.js。
パーティクルアニメーションとは?
パーティクルアニメーションとは、多数の小さな粒子(パーティクル)を画面上に散りばめ、それぞれを独立して動かすことで全体として有機的な動きや視覚効果を生み出す表現手法です。Webでは主にHTML5 CanvasのAPIやThree.js・WebGLを使って実装されます。
粒子一つひとつに位置・速度・加速度・寿命などのパラメータを持たせ、毎フレームごとに物理演算や数学関数で更新するのが基本的な仕組みです。背景エフェクトとして広く使われるほか、テキストをパーティクルで描いたり、マウス操作に反応させたりすることで、インタラクティブな演出にも応用できます。
CodePenとは?
CodePenは、HTML、CSS、JavaScriptを使ってウェブページのプロトタイプや実装を行うことができるオンラインの開発環境です。
CodePenでは、ウェブ開発者やデザイナーが、ブラウザ上でコードを書きながら、すばやく試行錯誤することができます。ユーザーは自分のプロジェクトを公開し、他のユーザーによるフィードバックを受けたり、共有することもできます。
CodePenには、エディター機能が搭載されており、HTML、CSS、JavaScriptのコードを入力することができます。また、ユーザーが公開したプロジェクトは、フロントエンドの技術を利用して動的な表現やアニメーションを作ることができます。
よくある質問
-
SASSやCoffeeScript・Pugで書かれているコードはそのまま使えますか?
そのままでは動作しません。いずれも事前コンパイルが必要です。CodePen上の「View Compiled CSS」または「View Compiled JavaScript/HTML」から変換後のコードを確認・コピーして使用してください。
-
Three.jsを使ったPenが動かない場合はどうすればよいですか?
Three.jsは頻繁にAPIが変更されるため、古いPenは旧バージョン(r61・r71など)のAPIを使用していることがあります。
THREE.ParticleSystem→THREE.Points、THREE.Geometry→THREE.BufferGeometryなど、現行APIへの読み替えが必要な場合があります。PenのExternal Scriptsに記載されているThree.jsのバージョンを確認してください。 -
パーティクルアニメーションはモバイルでも動きますか?
Canvas・WebGLを使ったアニメーションはモバイルブラウザでも動作しますが、粒子数が多いほど処理負荷が上がります。スマートフォン向けに実装する場合は粒子数を画面サイズに応じて減らす処理(例:
adjustParticleCount())を組み込むことを推奨します。また、マウスイベントのみ対応しているPenはタッチデバイスでインタラクションが効かない場合があるため、touchmoveイベントの追加が必要です。 -
パーティクルアニメーションをヒーローセクションの背景に使う場合、アクセシビリティ上の注意点はありますか?
前庭障害や光過敏症のユーザーへの配慮として、
@media (prefers-reduced-motion: reduce)メディアクエリでアニメーションを停止・低減する処理を追加することを推奨します。また、装飾目的のCanvasにはaria-hidden="true"属性を付与してスクリーンリーダーに読み上げられないようにすることも有効です。

