AspectCalc / index.html
SenY's picture
Init.
3c13b11
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AspectCalc サンプル</title>
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.drop-zone {
border: 2px dashed #dee2e6;
border-radius: 10px;
padding: 2rem;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
}
.drop-zone:hover {
border-color: #0d6efd;
background-color: #f8f9fa;
}
.drop-zone.dragover {
border-color: #0d6efd;
background-color: #e7f3ff;
}
.image-preview {
max-width: 100%;
max-height: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.aspect-ratio-card {
transition: transform 0.2s ease;
}
.aspect-ratio-card:hover {
transform: translateY(-2px);
}
.ratio-display {
font-size: 1.5rem;
font-weight: bold;
color: #0d6efd;
}
.copy-btn {
opacity: 0;
transition: opacity 0.2s ease;
}
.aspect-ratio-card:hover .copy-btn {
opacity: 1;
}
</style>
</head>
<body class="bg-light">
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-lg-10">
<!-- ヘッダー -->
<div class="text-center mb-5">
<h1 class="display-4 fw-bold text-primary">
<i class="fas fa-calculator me-3"></i>AspectCalc
</h1>
<p class="lead text-muted">画像の解像度からアスペクト比を計算するツール</p>
</div>
<!-- メインカード -->
<div class="card shadow-lg border-0">
<div class="card-body p-4">
<!-- 入力セクション -->
<div class="row">
<div class="col-md-6">
<h4 class="mb-3">
<i class="fas fa-upload me-2"></i>画像の入力
</h4>
<!-- ドラッグ&ドロップエリア -->
<div class="drop-zone mb-3" id="dropZone">
<i class="fas fa-cloud-upload-alt fa-3x text-muted mb-3"></i>
<p class="mb-2">画像をドラッグ&ドロップ</p>
<p class="text-muted small">または</p>
<button class="btn btn-outline-primary" id="fileSelectBtn">
<i class="fas fa-folder-open me-2"></i>ファイルを選択
</button>
<input type="file" id="fileInput" accept="image/*" class="d-none">
</div>
<!-- クリップボード貼り付け -->
<div class="mb-3">
<button class="btn btn-outline-secondary w-100" id="pasteBtn">
<i class="fas fa-paste me-2"></i>Ctrl+V でクリップボードから貼り付け
</button>
</div>
<!-- 手動入力 -->
<div class="card bg-light">
<div class="card-body">
<h6 class="card-title">
<i class="fas fa-keyboard me-2"></i>手動入力
</h6>
<div class="row g-2">
<div class="col-6">
<label for="widthInput" class="form-label small">幅 (px)</label>
<input type="number" class="form-control" id="widthInput" placeholder="1920" min="1">
</div>
<div class="col-6">
<label for="heightInput" class="form-label small">高さ (px)</label>
<input type="number" class="form-control" id="heightInput" placeholder="1080" min="1">
</div>
</div>
<button class="btn btn-primary btn-sm mt-2 w-100" id="calculateBtn">
<i class="fas fa-calculator me-2"></i>計算
</button>
</div>
</div>
</div>
<!-- プレビューエリア -->
<div class="col-md-6">
<h4 class="mb-3">
<i class="fas fa-eye me-2"></i>プレビュー
</h4>
<div id="previewArea" class="text-center">
<div class="text-muted">
<i class="fas fa-image fa-3x mb-3"></i>
<p>画像を選択してください</p>
</div>
</div>
<!-- 解像度情報 -->
<div id="resolutionInfo" class="mt-3 d-none">
<div class="alert alert-info">
<h6 class="alert-heading">
<i class="fas fa-info-circle me-2"></i>解像度情報
</h6>
<p class="mb-0">
幅: <span id="actualWidth" class="fw-bold">-</span>px<br>
高さ: <span id="actualHeight" class="fw-bold">-</span>px
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 結果表示エリア -->
<div id="resultsArea" class="mt-4 d-none">
<h4 class="mb-3">
<i class="fas fa-chart-line me-2"></i>アスペクト比の結果
</h4>
<div class="row g-3">
<!-- 整数比 -->
<div class="col-md-4">
<div class="card aspect-ratio-card h-100">
<div class="card-body text-center">
<h5 class="card-title">
<i class="fas fa-hashtag me-2"></i>整数比
</h5>
<div class="ratio-display" id="integerRatio">-</div>
<p class="text-muted small mt-2">最大公約数で割った最も簡単な比</p>
<button class="btn btn-outline-primary btn-sm copy-btn" data-ratio="integer">
<i class="fas fa-copy me-1"></i>コピー
</button>
</div>
</div>
</div>
<!-- 近似比 -->
<div class="col-md-4">
<div class="card aspect-ratio-card h-100">
<div class="card-body text-center">
<h5 class="card-title">
<i class="fas fa-search me-2"></i>近似比
</h5>
<div class="ratio-display" id="approximateRatio">-</div>
<p class="text-muted small mt-2">20以下の整数で最も近似の比</p>
<button class="btn btn-outline-primary btn-sm copy-btn" data-ratio="approximate">
<i class="fas fa-copy me-1"></i>コピー
</button>
</div>
</div>
</div>
<!-- 標準比 -->
<div class="col-md-4">
<div class="card aspect-ratio-card h-100">
<div class="card-body text-center">
<h5 class="card-title">
<i class="fas fa-tv me-2"></i>標準比
</h5>
<div class="ratio-display" id="standardRatio">-</div>
<p class="text-muted small mt-2">一般的なディスプレイ比</p>
<button class="btn btn-outline-primary btn-sm copy-btn" data-ratio="standard">
<i class="fas fa-copy me-1"></i>コピー
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Toast通知 -->
<div class="toast-container position-fixed bottom-0 end-0 p-3">
<div id="toast" class="toast" role="alert">
<div class="toast-header">
<i class="fas fa-check-circle text-success me-2"></i>
<strong class="me-auto">成功</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast" title="閉じる"></button>
</div>
<div class="toast-body" id="toastMessage">
コピーしました!
</div>
</div>
</div>
<!-- Bootstrap 5 JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- AspectCalc.js -->
<script src="AspectCalc.js"></script>
<!-- メインスクリプト -->
<script src="index.js"></script>
</body>
</html>