REPOP WEBツール倉庫

ブラウザだけで完結する便利なWEBツール、WEBアプリが沢山あります

万華鏡ジェネレーター

万華鏡ジェネレーター

CSSとJavaScriptで、Canvasを使用し幾何学模様が中心から対称に広がり色鮮やかに変化する万華鏡のような背景アニメーションを生成します。

プレビュー

<!-- 万華鏡背景を描画するCanvas要素 -->
<canvas class="kaleidoscope-canvas"></canvas>
/* Canvasを親コンテナ全体にフィットさせるスタイル */
.kaleidoscope-canvas {
	display: block;
	width: 100%;
	height: 400px;
	background-color: {{bg_color}};
}
(() => {
	const canvas = document.querySelector('.kaleidoscope-canvas');
	if (!canvas) return;
	const ctx = canvas.getContext('2d');

	// 高解像度対応とサイズ調整 (ResizeObserverを使用してメモリリークを防止)
	const resizeObserver = new ResizeObserver(() => {
		canvas.width = canvas.offsetWidth;
		canvas.height = canvas.offsetHeight;
	});
	resizeObserver.observe(canvas);

	// 設定値のバインド
	const symmetry = {{symmetry}};
	const speed = {{speed}};
	const lineWidth = {{line_width}};
	const particleCount = {{particle_count}};
	const colorScheme = '{{color_scheme}}';
	const bgColor = '{{bg_color}}';
	const zoom = {{zoom}};
	const fadeSpeed = {{fade_speed}} / 100; // 残像(透明度)

	// パーティクルクラス定義
	class Particle {
		constructor() {
			this.reset();
		}
		reset() {
			// 中心からの距離と角度
			this.r = Math.random() * 200 + 20;
			this.angle = Math.random() * Math.PI * 2;
			this.size = Math.random() * 5 + 2;
			// 速度
			this.vr = (Math.random() - 0.5) * speed;
			this.vangle = (Math.random() - 0.5) * 0.02 * speed;
			// 色生成
			this.color = this.getColor();
		}
		getColor() {
			const hue = Math.random() * 360;
			switch(colorScheme) {
				case 'rainbow':
					return `hsl(${hue}, 100%, 60%)`;
				case 'neon':
					const neonColors = ['#ff007f', '#00f6ff', '#39ff14', '#ffff00'];
					return neonColors[Math.floor(Math.random() * neonColors.length)];
				case 'warm':
					return `hsl(${Math.random() * 60}, 100%, 50%)`;
				case 'cool':
					return `hsl(${Math.random() * 120 + 180}, 100%, 50%)`;
				case 'monochrome':
					return `hsl(0, 0%, ${Math.random() * 100}%)`;
				default:
					return `hsl(${hue}, 100%, 60%)`;
			}
		}
		update() {
			this.r += this.vr;
			this.angle += this.vangle;
			
			// 画面端にいったら反射
			const maxR = Math.min(canvas.width, canvas.height) * 0.5 * zoom;
			if (this.r > maxR || this.r < 10) {
				this.vr = -this.vr;
			}
		}
	}

	const particles = Array.from({ length: particleCount }, () => new Particle());

	// 描画処理関数
	const draw = () => {
		// 背景色に透明度を混ぜてフェードアウト(残像)
		ctx.fillStyle = hexToRgba(bgColor, fadeSpeed);
		ctx.fillRect(0, 0, canvas.width, canvas.height);

		const cx = canvas.width / 2;
		const cy = canvas.height / 2;

		// パーティクルの更新
		particles.forEach(p => p.update());

		// 対称描画のループ
		for (let i = 0; i < symmetry; i++) {
			// 表側の描画
			ctx.save();
			ctx.translate(cx, cy);
			ctx.rotate((Math.PI * 2 / symmetry) * i);
			drawSector();
			ctx.restore();

			// 鏡像(反射)の描画
			ctx.save();
			ctx.translate(cx, cy);
			ctx.scale(1, -1);
			ctx.rotate((Math.PI * 2 / symmetry) * i);
			drawSector();
			ctx.restore();
		}
	};

	// 扇形セクション内の描画ロジック
	const drawSector = () => {
		ctx.lineWidth = lineWidth;
		ctx.lineCap = 'round';
		ctx.lineJoin = 'round';

		// パーティクル同士を線で結ぶ(幾何学模様)
		for (let j = 0; j < particles.length; j++) {
			const p1 = particles[j];
			const x1 = Math.cos(p1.angle) * p1.r * zoom;
			const y1 = Math.sin(p1.angle) * p1.r * zoom;

			ctx.beginPath();
			ctx.fillStyle = p1.color;
			ctx.arc(x1, y1, p1.size, 0, Math.PI * 2);
			ctx.fill();

			// 近いパーティクル同士を繋ぐ
			for (let k = j + 1; k < particles.length; k++) {
				const p2 = particles[k];
				const x2 = Math.cos(p2.angle) * p2.r * zoom;
				const y2 = Math.sin(p2.angle) * p2.r * zoom;
				
				const dist = Math.hypot(x2 - x1, y2 - y1);
				if (dist < 100 * zoom) {
					ctx.beginPath();
					ctx.strokeStyle = p1.color;
					ctx.globalAlpha = (1 - dist / (100 * zoom)) * 0.4;
					ctx.moveTo(x1, y1);
					ctx.lineTo(x2, y2);
					ctx.stroke();
				}
			}
		}
		ctx.globalAlpha = 1.0;
	};

	// 16進数カラーコードをRGBAに変換するヘルパー関数
	function hexToRgba(hex, alpha) {
		const r = parseInt(hex.slice(1, 3), 16);
		const g = parseInt(hex.slice(3, 5), 16);
		const b = parseInt(hex.slice(5, 7), 16);
		return `rgba(${r}, ${g}, ${b}, ${alpha})`;
	}

	const animate = () => {
		draw();
		requestAnimationFrame(animate);
	};
	animate();
})();

機能、使い方

コードの説明

getContext('2d') を使用し、Canvas API による高度な描画操作を行っています。

ctx.rotate() を用いた座標系の回転と、ctx.scale(1, -1) による鏡像反射を組み合わせることで、万華鏡ならではの対称的な幾何学模様を完璧に表現しています。

アニメーションループには requestAnimationFrame を採用し、ブラウザの描画タイミングに同期させた滑らかで高パフォーマンスな処理を行っています。

公開日 :
桜が舞うアニメーション ジェネレーター

桜が舞うアニメーション ジェネレーター

CSSとJavaScriptで、画面上部から風に吹かれながら優雅に舞い散る桜の花びらのアニメーションコードを生成します。

アニメーション付きハンバーガーメニュー ジェネレーター

アニメーション付きハンバーガーメニュー ジェネレーター

CSSとJavaScriptで、クリック時に3本線からバツ印へ変化するハンバーガーボタンと、画面外からスライドインするサイドメニューを自由にカスタマイズしてコード生成します。

3Dエンドロール ジェネレーター

3Dエンドロール ジェネレーター

CSSとJavaScriptで、映画のオープニングやエンディングのように画面の奥へ向かって流れる立体的な3Dテキストのスクロール演出を生成します。

モーダルウィンドウ ジェネレーター

モーダルウィンドウ ジェネレーター

CSSとJavaScriptで、表示位置、サイズ、開閉アニメーション、暗転オーバーレイの有無などを細かくカスタマイズできるモーダルウィンドウを生成します。

マトリックス風デジタルレイン ジェネレーター

マトリックス風デジタルレイン ジェネレーター

CSSとJavaScriptで、映画「マトリックス」のように上から下へとグリーンのコード文字が流れ落ちるデジタルレイン背景エフェクトを生成します。

紙吹雪が舞うアニメーション ジェネレーター

紙吹雪が舞うアニメーション ジェネレーター

CSSとJavaScriptで、指定したボタンをクリックした際などに画面内に色とりどりの紙吹雪がランダムに舞い落ちる演出を生成します。

波紋アニメーション ジェネレーター

波紋アニメーション ジェネレーター

CSSとJavaScriptで、クリックやタップした位置を中心に、同心円状の波紋が広がりながら消えていくインタラクティブなUIエフェクトを生成します。

スポットライトUI ジェネレーター

スポットライトUI ジェネレーター

CSSとJavaScriptで、マウスカーソルの動きに合わせて指定範囲をスポットライトのように明るく照らし、周囲を暗くマスクするインタラクティブなUIを生成します。

画像比較スライダー

画像比較スライダー

2枚の画像を重ねて、スライダーのドラッグ操作で左右に切り替えてビフォーアフターを比較できるインタラクティブな画像比較UIツールです。HTML/CSS/JSコードを取得できます。

3Dに傾く透過カードのCSSジェネレーター

3Dに傾く透過カードのCSSジェネレーター

マウスの動きに合わせて傾き、表面に光が反射したような効果を持つ透過カードのデザインを生成します。

もっと見る

もっと見る

JavaScript関連ツール一覧

JSONXMLJavaScriptHTMLCSSSVGPHPPython画像処理色、カラーコードテキスト
ファイルの文字化け解消ツール

ファイルの文字化け解消ツール

文字化けしてしまうテキストファイル(Shift_JISやEUC-JPなど)の文字コードを自動判定してからUTF-8にデコードし、汎用的に使えるファイルを作成します。

JSONとXMLの相互変換ツール

JSONとXMLの相互変換ツール

JSONデータとXMLデータを相互に変換します。リアルタイムでの変換や、ルート要素・子要素名の指定に対応。

水玉模様のCSSジェネレーター

水玉模様のCSSジェネレーター

背景色、ドットの色、ドットのサイズや間隔、配置パターン(格子状・千鳥状)を調整し、水玉模様(ドット背景)のCSSコードを生成します。

clamp()シュミレーター

clamp()シュミレーター

画面幅に応じて最小サイズから最大サイズまでフォントサイズを滑らかに自動スケーリングさせるCSSのclamp()コードを生成・シミュレートします。

傾いて落ちるボタンのCSSジェネレーター

傾いて落ちるボタンのCSSジェネレーター

ホバーするとぐらっと傾き、クリックすると画面外へと落下するボタン用のアニメーションCSSを生成します。

画像のフチぼかし(透過グラデーションマスク)のCSSジェネレーター

画像のフチぼかし(透過グラデーションマスク)のCSSジェネレーター

画像の端を透過グラデーションでぼかし、背景と滑らかに馴染ませるエフェクトを生成します。mask-imageを使用し、上下左右や円形など複数の方向にフェードアウト可能です。

文字の中に画像(マスクテキスト)のCSSジェネレーター

文字の中に画像(マスクテキスト)のCSSジェネレーター

指定した画像を文字の形に切り抜き、インパクトのあるテキストエフェクトを生成します。グラフィカルな見出しやタイトルの作成に適しています。

フリッカー・ネオン(点滅ネオン)のCSSジェネレーター

フリッカー・ネオン(点滅ネオン)のCSSジェネレーター

不規則な点滅を繰り返す、リアリティのあるネオンサイン文字のエフェクトを生成します。多重シャドウによる発光と透明度の変化で、レトロな雰囲気を演出します。

虹色に輝く枠線(レインボー・ローテート)のCSSジェネレーター

虹色に輝く枠線(レインボー・ローテート)のCSSジェネレーター

枠線が虹色に変化しながら回転し続ける視覚効果を生成します。conic-gradientを活用し、画像不要で軽量な実装が可能です。

ぷかぷか浮遊(フローティング演出)のCSSジェネレーター

ぷかぷか浮遊(フローティング演出)のCSSジェネレーター

要素が空中を漂うような、浮遊アニメーションを生成するツールです。

もっと見る

もっと見る

仕事、作業関連ツール一覧