マウスドラッグで上下左右に自由に360度回転できるカードを作る方法【HTML/CSS/JavaScript・サンプルコード付き】
カードUI
マウスドラッグで上下左右に自由に360度回転できるカードを作る方法
マウスドラッグで上下左右に自由に360度回転できるカードを作る方法を紹介します。カードをドラッグすると、マウスの動きに合わせて上下左右へ回転し、表面だけでなく裏面も確認できるカードUIを作成できます。商品カード、プロフィールカード、キャラクターカード、作品紹介など、カードを立体的に見せたい場面に使いやすい実装です。
このサンプルでは、HTMLでカードの表面と裏面を用意し、CSSで3D回転と裏面表示を設定します。JavaScriptでは、ドラッグ中のマウス移動量を取得し、rotateX()とrotateY()の角度へ反映することで、カードを上下左右に自由に回転できるようにしています。
カードの表面と裏面の内容、背景色、サイズ、角丸、影、回転の感度などは自由に変更できます。マウス操作でカードをぐるっと回せるため、通常のカードUIよりも動きが分かりやすく、ユーザーに触って確認してもらうような演出にも向いています。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
このデモでは、カードをドラッグすると上下左右へ360度回転します。表面と裏面を用意しているため、裏側まで自然に表示できます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマホ表示に対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>マウスドラッグで上下左右に自由に360度回転できるカードを作る方法</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- カード表示エリア -->
<div class="rotate-360-card_demo">
<!-- ドラッグで回転するカード -->
<div class="rotate-360-card_card">
<!-- 回転する本体 -->
<div class="rotate-360-card_inner">
<!-- 表面 -->
<div class="rotate-360-card_front">
<h3>表面</h3>
<p>
カードをドラッグして自由に回転できます。
</p>
</div>
<!-- 裏面 -->
<div class="rotate-360-card_back">
<h3>裏面</h3>
<p>
360度回転させると裏面も確認できます。
</p>
</div>
</div>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ページ外側の余白 */
font-family:sans-serif; /* 使用するフォント */
background:#f8fafc; /* ページ背景色 */
}
/* カード表示エリア */
.rotate-360-card_demo{
display:flex; /* カードを中央配置 */
justify-content:center; /* 横方向中央寄せ */
padding:40px 20px; /* 外側余白 */
background:#f8fbff; /* 背景色 */
border-radius:18px; /* 角丸 */
perspective:1200px; /* 3Dの奥行き */
}
/* カード */
.rotate-360-card_card{
width:320px; /* 横幅 */
height:220px; /* 高さ */
cursor:grab; /* ドラッグカーソル */
user-select:none; /* テキスト選択を無効 */
}
/* ドラッグ中 */
.rotate-360-card_card:active{
cursor:grabbing;
}
/* 回転する本体 */
.rotate-360-card_inner{
position:relative; /* 表裏を重ねる基準 */
width:100%; /* 横幅 */
height:100%; /* 高さ */
transform-style:preserve-3d; /* 3D表示 */
}
/* 表面・裏面共通 */
.rotate-360-card_front,
.rotate-360-card_back{
position:absolute; /* 重ねて配置 */
inset:0; /* 全面配置 */
display:flex; /* 中央配置 */
flex-direction:column;
justify-content:center;
align-items:center;
padding:28px 24px;
border:1px solid #dbeafe;
border-radius:18px;
box-shadow:0 12px 30px rgba(15,23,42,.08);
backface-visibility:hidden; /* 裏側非表示 */
-webkit-backface-visibility:hidden;
text-align:center;
}
/* 表面 */
.rotate-360-card_front{
background:#ffffff;
}
/* 裏面 */
.rotate-360-card_back{
background:#2563eb;
color:#ffffff;
transform:rotateY(180deg); /* 裏面を反転配置 */
}
/* タイトル */
.rotate-360-card_front h3,
.rotate-360-card_back h3{
margin:0 0 12px;
font-size:22px;
font-weight:900;
}
/* 表面タイトル */
.rotate-360-card_front h3{
color:#0f172a;
}
/* 説明文 */
.rotate-360-card_front p,
.rotate-360-card_back p{
margin:0;
font-size:15px;
line-height:1.8;
}
/* 表面説明文 */
.rotate-360-card_front p{
color:#475569;
}
// 回転するカードを取得
const rotate360Card = document.querySelector(".rotate-360-card_card");
// 回転する本体を取得
const rotate360Inner = document.querySelector(".rotate-360-card_inner");
// 現在の回転角度
let rotateX = 0;
let rotateY = 0;
// ドラッグ開始位置
let startX = 0;
let startY = 0;
// ドラッグ中か判定
let dragging = false;
// マウスを押した時
rotate360Card.addEventListener("mousedown", function(event){
// ドラッグ開始
dragging = true;
// 開始位置を保存
startX = event.clientX;
startY = event.clientY;
});
// マウスを動かした時
window.addEventListener("mousemove", function(event){
// ドラッグ中以外は何もしない
if(!dragging){
return;
}
// マウス移動量を回転角度へ加算
rotateY += event.clientX - startX;
rotateX -= event.clientY - startY;
// カードへ回転を反映
rotate360Inner.style.transform =
`rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
// 次回計算用に現在位置を保存
startX = event.clientX;
startY = event.clientY;
});
// マウスを離した時
window.addEventListener("mouseup", function(){
// ドラッグ終了
dragging = false;
});
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3つのファイルで構成されています。HTMLではカードの表面と裏面を用意し、CSSでは3D回転やデザインを設定しています。JavaScriptではマウスドラッグの移動量を取得し、カードを上下左右へ自由に360度回転させる処理を行っています。
sample/
├── index.html
├── style.css
└── script.js
sampleフォルダ内に各ファイルを配置し、ブラウザでsample/index.htmlを開くと動作を確認できます。カードの表面・裏面の内容はindex.html、カードのサイズ・色・角丸・影などのデザインはstyle.cssから変更できます。また、script.jsではドラッグ時の回転処理を行っているため、回転速度や回転量を変更することで好みの操作感に調整できます。
マウスドラッグで上下左右に自由に360度回転できるカードを作る方法【HTML/CSS/JavaScript・サンプルコード付き】
コメント