REPOP WEBツール倉庫

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

画像比較スライダー

画像比較スライダー

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

プレビュー

<div class="comparison-view" id="my-comparison-slider">
	<div class="comparison-item comparison-after">
		<img src="https://web-tools.repop.jp/images/bg-image-2.webp" alt="After">
		<span class="comparison-label right">プレビュー</span>
	</div>
	<div class="comparison-item comparison-original">
		<img src="https://web-tools.repop.jp/images/bg-image-1.webp" alt="Before">
		<span class="comparison-label left">オリジナル</span>
	</div>
	<div class="comparison-slider" id="comparison-slider">
		<div class="slider-handle">↔</div>
	</div>
</div>
/* スライダー全体のコンテナ */
.comparison-view {
	position: relative;
	width: 100%;
	height: 400px;
	display: flex;
	--split-pos: 50%; /* 仕切り位置の初期設定(パーセンテージ) */
	user-select: none;
	-webkit-user-select: none;
}

/* 前面(クリップされる側)の画像アイテム */
.comparison-original {
	clip-path: inset(0 calc(100% - var(--split-pos)) 0 0); /* 位置に応じて右側をクリップ */
	z-index: 1;
}

/* 背面(ベースとなる側)の画像アイテム */
.comparison-after {
	z-index: 0;
}

/* 各画像アイテムの配置枠 */
.comparison-item {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	display: flex;
	justify-content: center;
	align-items: center;
}

/* 画像のスタイル設定 */
.comparison-item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	pointer-events: none; /* 画像自体の標準ドラッグ挙動を無効化 */
}

/* スライド用ドラッグ線(バー) */
.comparison-slider {
	position: absolute;
	top: 0;
	left: var(--split-pos);
	width: 4px;
	height: 100%;
	background: #00d2ff;
	z-index: 3;
	transform: translateX(-50%);
	cursor: pointer;
	box-shadow: 0 0 10px rgba(0, 210, 255, 0.5);
}

/* 中央のスライダーハンドル(丸形ノブ) */
.slider-handle {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 48px;
	height: 48px;
	background: #00d2ff;
	color: #fff;
	border-radius: 50%;
	display: flex;
	justify-content: center;
	align-items: center;
	z-index: 4;
	font-weight: bold;
	box-shadow: 0 0 20px rgba(0, 210, 255, 0.6);
	cursor: pointer;
	border: 3px solid rgba(255, 255, 255, 0.3);
	font-size: 1.2rem;
}

/* ドラッグ動作中のカーソル指定 */
.slider-handle:active {
	cursor: grabbing;
}

/* 比較用テキストラベルの共通枠 */
.comparison-label {
	position: absolute;
	bottom: 20px;
	padding: 6px 15px;
	background: rgba(0, 0, 0, 0.7);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	border-radius: 50px;
	font-size: 0.85rem;
	font-weight: 700;
	color: #fff;
	z-index: 5;
	border: 1px solid rgba(255, 255, 255, 0.1);
}

/* 左ラベルの位置と装飾(オリジナル) */
.comparison-label.left {
	left: 20px;
	border-left: 3px solid #00d2ff;
}

/* 右ラベルの位置と装飾(プレビュー) */
.comparison-label.right {
	right: 20px;
	border-right: 3px solid #00d2ff;
}
// スライダー要素とコンテナ要素を取得
const container = document.querySelector('.comparison-view');
const slider = document.querySelector('#comparison-slider');

if (container && slider) {
	let isDragging = false; // ドラッグ状態管理フラグ

	// スライダーの位置を計算し更新する関数
	const moveSlider = (e) => {
		if (!isDragging) return;

		const rect = container.getBoundingClientRect();
		// マウス移動またはタッチ移動のX座標からコンテナ内のローカル位置を計算
		const x = (e.clientX || (e.touches && e.touches[0].clientX)) - rect.left;
		let percent = (x / rect.width) * 100;

		// 範囲を0%〜100%に制限
		if (percent < 0) percent = 0;
		if (percent > 100) percent = 100;

		// CSSカスタムプロパティを更新してスライド幅に反映
		container.style.setProperty('--split-pos', `${percent}%`);
	};

	// マウスドラッグ開始
	slider.addEventListener('mousedown', (e) => {
		isDragging = true;
		e.preventDefault(); // テキスト選択や画像の標準ドラッグ等の挙動を防止
	});

	// タッチドラッグ開始
	slider.addEventListener('touchstart', () => {
		isDragging = true;
	});

	// マウス・タッチ移動イベントをコンテナに登録
	container.addEventListener('mousemove', moveSlider);
	container.addEventListener('touchmove', moveSlider, { passive: false });

	// マウス・タッチドラッグ終了
	container.addEventListener('mouseup', () => {
		isDragging = false;
	});

	container.addEventListener('touchend', () => {
		isDragging = false;
	});
}

機能・使い方

画像のドラッグ操作(比較スライダー)の仕組み

画像比較スライダーは、2枚の画像を絶対配置で重ね合わせ、前面の画像にCSSの clip-path: inset() を適用して非表示領域を制御する仕組みになっています。

JavaScriptでマウスやスマートフォンのタッチドラッグ位置を取得し、コンテナに対するパーセンテージ(--split-pos)を割り出してCSS変数(カスタムプロパティ)をリアルタイムに更新することで、非常に軽快で滑らかなスライド効果を実現しています。

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

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

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

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

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

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

万華鏡ジェネレーター

万華鏡ジェネレーター

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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ジェネレーター

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

もっと見る

もっと見る

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