container.appendChild(el);
});
}
/**
* 行選択を処理します
*/
function selectCoin(id) {
selectedCoinId = id;
/ 行を視覚的に更新
const rows = container.children;
Array.from(rows).forEach(row => {
const rowId = parseInt(row.getAttribute(‘data-id’));
if (rowId === id) {
row.classList.add(‘ring-2’, ‘ring-offset-2’, ‘ring-blue-500’, ‘bg-blue-50’);
row.classList.remove(‘bg-white’);
} else {
row.classList.remove(‘ring-2’, ‘ring-offset-2’, ‘ring-blue-500’, ‘bg-blue-50’);
row.classList.add(‘bg-white’);
}
});
updateCalculator();
}
/**
* 値を計算して表示を更新します
*/
function updateCalculator() {
if (!selectedCoinId) return;
const coin = coinData.find(c => c.id === selectedCoinId);
const qty = parseInt(quantityInput.value) || 0;
/ 状態テキストを更新
displayState.textContent = coin.state;
displayState.className = “text-blue-600 font-bold text-lg mb-4 h-6 animate-pulse-once”;
/ 合計金額を計算
const total = coin.priceValue * qty;
/ フランス通貨でフォーマット
const formatter = new Intl.NumberFormat(‘fr-FR’, {
style: ‘currency’,
currency: ‘EUR’
});
displayTotal.textContent = formatter.format(total);
/ 合計テキストにシンプルなアニメーションを表示
displayTotal.classList.remove(‘scale-100’);
displayTotal.classList.add(‘scale-110’);