<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">红黄牌统计 · 哪队更多?</title>
<style>
* {
box-sizing: border-box;
font-family: system-ui, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
}
body {
background: linear-gradient(145deg, #1e2b3c 0%, #0f1a26 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
margin: 0;
padding: 20px;
}
.card {
background: rgba(22, 34, 48, 0.9);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-radius: 2.5rem;
padding: 2rem 2rem 2.2rem;
box-shadow: 0 25px 40px -10px rgba(0, 0, 0, 0.7), inset 0 1px 2px rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.06);
width: 100%;
max-width: 680px;
transition: all 0.2s ease;
}
h1 {
font-size: 1.9rem;
font-weight: 600;
letter-spacing: -0.01em;
color: #f0f6ff;
margin: 0 0 1.8rem 0;
display: flex;
align-items: center;
gap: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 1rem;
}
h1 span {
background: #eab308;
color: #0a0f14;
font-size: 1rem;
font-weight: 700;
padding: 0.2rem 0.9rem;
border-radius: 40px;
letter-spacing: 0.3px;
margin-left: auto;
}
.teams-container {
display: flex;
gap: 20px;
margin-bottom: 2rem;
flex-wrap: wrap;
}
.team {
flex: 1 1 240px;
background: rgba(12, 22, 33, 0.7);
border-radius: 1.8rem;
padding: 1.4rem 1.2rem 1.2rem;
border: 1px solid rgba(255, 255, 255, 0.05);
box-shadow: inset 0 2px 4px rgba(0,0,0,0.3), 0 6px 12px rgba(0,0,0,0.2);
transition: transform 0.1s;
}
.team-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
padding: 0 0.2rem;
}
.team-name {
font-size: 1.5rem;
font-weight: 700;
color: #e8f0fc;
letter-spacing: -0.3px;
display: flex;
align-items: center;
gap: 8px;
}
.team-name .dot {
width: 10px;
height: 10px;
border-radius: 10px;
background: #3b82f6;
box-shadow: 0 0 8px #3b82f6aa;
}
.team-badge {
background: rgba(255, 255, 255, 0.06);
border-radius: 60px;
padding: 0.2rem 0.8rem;
font-size: 0.8rem;
font-weight: 500;
color: #adb9c7;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.card-stats {
display: flex;
flex-direction: column;
gap: 1.2rem;
}
.stat-row {
display: flex;
align-items: center;
justify-content: space-between;
background: rgba(255, 255, 255, 0.02);
border-radius: 60px;
padding: 0.4rem 0.4rem 0.4rem 1.4rem;
border: 1px solid rgba(255, 255, 255, 0.03);
}
.stat-label {
display: flex;
align-items: center;
gap: 8px;
font-weight: 500;
color: #cbd5e1;
}
.card-icon {
display: inline-block;
width: 26px;
height: 30px;
border-radius: 6px;
box-shadow: 0 4px 8px rgba(0,0,0,0.5);
margin-right: 4px;
position: relative;
top: 2px;
}
.yellow-card {
background: #eab308;
border: 1px solid #facc15;
}
.red-card {
background: #dc2626;
border: 1px solid #f87171;
}
.stat-value {
background: #0b1622;
padding: 0.45rem 1.3rem;
border-radius: 40px;
font-weight: 700;
font-size: 1.3rem;
color: #f1f5f9;
min-width: 80px;
text-align: center;
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow: inset 0 2px 5px rgba(0,0,0,0.6);
letter-spacing: 0.5px;
}
.total-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 0.5rem;
padding: 0.3rem 0.2rem 0.3rem 1.4rem;
background: rgba(234, 179, 8, 0.08);
border-radius: 60px;
border: 1px dashed rgba(234, 179, 8, 0.3);
}
.total-label {
font-weight: 600;
color: #facc15;
font-size: 0.95rem;
letter-spacing: 0.3px;
}
.total-value {
background: #1e2b3c;
padding: 0.3rem 1.2rem;
border-radius: 40px;
font-weight: 700;
font-size: 1.3rem;
color: #facc15;
border: 1px solid #eab30855;
min-width: 80px;
text-align: center;
}
.compare-section {
margin-top: 1.2rem;
background: rgba(10, 18, 28, 0.8);
border-radius: 1.6rem;
padding: 1.2rem 1.6rem;
text-align: center;
border: 1px solid rgba(255, 255, 255, 0.05);
box-shadow: inset 0 2px 6px rgba(0,0,0,0.5);
}
.compare-message {
font-size: 1.25rem;
font-weight: 600;
color: #ffffff;
letter-spacing: 0.2px;
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
}
.compare-message .highlight {
font-size: 2rem;
font-weight: 800;
background: linear-gradient(to right, #eab308, #f97316);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
line-height: 1.3;
}
.compare-message .subnote {
font-weight: 400;
color: #9aa9bb;
font-size: 0.9rem;
letter-spacing: 0.2px;
margin-top: 4px;
}
.reset-btn {
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.15);
color: #b9c7d9;
border-radius: 60px;
padding: 0.7rem 1.6rem;
font-size: 0.9rem;
font-weight: 500;
margin-top: 1.4rem;
width: 100%;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.reset-btn:hover {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.3);
color: #e2e8f0;
}
.reset-btn:active {
transform: scale(0.98);
}
.click-hint {
font-size: 0.75rem;
color: #6a7d94;
display: block;
margin-top: 10px;
text-align: center;
}
</style>
</head>
<body>
<div class="card">
<h1>
⚽ 红黄牌统计
<span>哪队更多?</span>
</h1>
<!-- 两队卡片区域 -->
<div class="teams-container">
<!-- 主队 -->
<div class="team">
<div class="team-header">
<div class="team-name">
<span class="dot" style="background: #3b82f6; box-shadow: 0 0 8px #3b82f6;"></span> 主队
</div>
<div class="team-badge">HOME</div>
</div>
<div class="card-stats">
<!-- 黄牌输入行 -->
<div class="stat-row">
<div class="stat-label">
<span class="card-icon yellow-card"></span> 黄牌
</div>
<input type="number" id="homeYellow" class="stat-value" min="0" value="2" step="1">
</div>
<!-- 红牌输入行 -->
<div class="stat-row">
<div class="stat-label">
<span class="card-icon red-card"></span> 红牌
</div>
<input type="number" id="homeRed" class="stat-value" min="0" value="0" step="1">
</div>
<!-- 主队总牌数显示 -->
<div class="total-row">
<span class="total-label">总牌数</span>
<span class="total-value" id="homeTotal">2</span>
</div>
</div>
</div>
<!-- 客队 -->
<div class="team">
<div class="team-header">
<div class="team-name">
<span class="dot" style="background: #f97316; box-shadow: 0 0 8px #f97316;"></span> 客队
</div>
<div class="team-badge">AWAY</div>
</div>
<div class="card-stats">
<div class="stat-row">
<div class="stat-label">
<span class="card-icon yellow-card"></span> 黄牌
</div>
<input type="number" id="awayYellow" class="stat-value" min="0" value="3" step="1">
</div>
<div class="stat-row">
<div class="stat-label">
<span class="card-icon red-card"></span> 红牌
</div>
<input type="number" id="awayRed" class="stat-value" min="0" value="1" step="1">
</div>
<div class="total-row">
<span class="total-label">总牌数</span>
<span class="total-value" id="awayTotal">4</span>
</div>
</div>
</div>
</div>
<!-- 比较结果区域 -->
<div class="compare-section" id="compareSection">
<div class="compare-message" id="compareMessage">
<!-- JS 动态填充 -->
</div>
</div>
<!-- 重置按钮 -->
<button class="reset-btn" id="resetBtn">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 12a9 9 0 1 0 9-9m0 0v6m0-6h-6"/>
</svg>
重置为示例数据 (主2/0 客3/1)
</button>
<small class="click-hint">点击数字框直接修改 · 实时统计</small>
</div>
<script>
(function() {
// DOM 元素
const homeYellowInput = document.getElementById('homeYellow');
const homeRedInput = document.getElementById('homeRed');
const awayYellowInput = document.getElementById('awayYellow');
const awayRedInput = document.getElementById('awayRed');
const homeTotalSpan = document.getElementById('homeTotal');
const awayTotalSpan = document.getElementById('awayTotal');
const compareMessageDiv = document.getElementById('compareMessage');
// 辅助: 安全地解析整数, 保证 ≥ 0
function parseCard(value) {
let num = Number(value);
if (isNaN(num) || num < 0) num = 0;
return Math.floor(num); // 保证整数
}
// 核心: 更新所有统计、总牌数和比较结果
function updateStats() {
// 读取并规范化输入值 (若输入非数字或负数, 显示层面稍后也会修正)
let homeYellow = parseCard(homeYellowInput.value);
let homeRed = parseCard(homeRedInput.value);
let awayYellow = parseCard(awayYellowInput.value);
let awayRed = parseCard(awayRedInput.value);
// 如果输入框的值不是合法非负整数, 将输入框的值重置为解析后的值
if (homeYellowInput.value !== String(homeYellow)) homeYellowInput.value = homeYellow;
if (homeRedInput.value !== String(homeRed)) homeRedInput.value = homeRed;
if (awayYellowInput.value !== String(awayYellow)) awayYellowInput.value = awayYellow;
if (awayRedInput.value !== String(awayRed)) awayRedInput.value = awayRed;
// 计算每队总牌数
const homeTotal = homeYellow + homeRed;
const awayTotal = awayYellow + awayRed;
// 更新显示的总牌数
homeTotalSpan.textContent = homeTotal;
awayTotalSpan.textContent = awayTotal;
// 比较哪队总牌数更多 (红黄牌合计)
let comparisonText = '';
let winnerClass = '';
if (homeTotal > awayTotal) {
comparisonText = `主队 比 客队 多 ${homeTotal - awayTotal} 张牌`;
winnerClass = '主队更多';
} else if (awayTotal > homeTotal) {
comparisonText = `客队 比 主队 多 ${awayTotal - homeTotal} 张牌`;
winnerClass = '客队更多';
} else {
comparisonText = `两队总牌数持平 (${homeTotal} 张)`;
winnerClass = '平局';
}
// 更详细的描述: 红牌黄牌细分谁更多? 但主要突出总牌数比较,还可以显示红黄牌对比细项。
const yellowCompare = homeYellow === awayYellow ? '黄牌持平' :
(homeYellow > awayYellow ? `主队黄牌多${homeYellow - awayYellow}张` : `客队黄牌多${awayYellow - homeYellow}张`);
const redCompare = homeRed === awayRed ? '红牌持平' :
(homeRed > awayRed ? `主队红牌多${homeRed - awayRed}张` : `客队红牌多${awayRed - homeRed}张`);
// 构建比较区域的 HTML
let bigMessage = '';
let bigHighlight = '';
if (homeTotal > awayTotal) {
bigMessage = '🔵 主队 总牌数更多';
bigHighlight = `${homeTotal} : ${awayTotal}`;
} else if (awayTotal > homeTotal) {
bigMessage = '🟠 客队 总牌数更多';
bigHighlight = `${awayTotal} : ${homeTotal}`;
} else {
bigMessage = '⚖️ 总牌数持平';
bigHighlight = `${homeTotal} : ${awayTotal}`;
}
// 用更好看的方式渲染
compareMessageDiv.innerHTML = `
<div style="font-size:1.1rem; font-weight:500; color:#b9c7da; margin-bottom:6px;">${bigMessage}</div>
<div class="highlight" style="font-size:2.2rem; font-weight:800; background:linear-gradient(135deg,#eab308,#f97316); -webkit-background-clip:text; background-clip:text; color:transparent;">${bigHighlight}</div>
<div class="subnote" style="display:flex; gap:16px; justify-content:center; flex-wrap:wrap; margin-top:10px;">
<span>🟨 黄牌: ${homeYellow} vs ${awayYellow} (${yellowCompare})</span>
<span>🟥 红牌: ${homeRed} vs ${awayRed} (${redCompare})</span>
</div>
`;
// 可选: 添加动态颜色到总牌值? 用不着,但保持清晰
}
// 重置为示例数据 (主队2黄0红, 客队3黄1红)
function resetToExample() {
homeYellowInput.value = 2;
homeRedInput.value = 0;
awayYellowInput.value = 3;
awayRedInput.value = 1;
updateStats();
}
// 绑定输入事件
function bindEvents() {
const inputs = [homeYellowInput, homeRedInput, awayYellowInput, awayRedInput];
inputs.forEach(input => {
input.addEventListener('input', updateStats);
// 对于 number 输入框,还可以处理 change 事件确保格式化
input.addEventListener('change', function() {
// 如果输入了非数字或负数,进行修正
let val = parseCard(this.value);
if (this.value !== String(val)) {
this.value = val;
}
updateStats();
});
// 防止输入 "e" 或 无效字符 (number 类型已限制,但以防万一)
input.addEventListener('keydown', function(e) {
// 允许退格、删除、Tab、箭头等
const allowedKeys = ['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];
if (allowedKeys.includes(e.key)) return;
// 阻止非数字键 (但允许数字和点? number 输入框不需要点,红黄牌是整数)
if (e.key === '.' || e.key === 'e' || e.key === 'E' || e.key === '-' || e.key === '+') {
e.preventDefault();
}
});
});
// 重置按钮
document.getElementById('resetBtn').addEventListener('click', resetToExample);
}
// 初始化一切
function init() {
// 设置示例初始值 (已在html中预置,但保证一致)
// 不过如果用户修改后刷新, 会恢复HTML默认值, 这正是我们想要的
// 调用更新
updateStats();
bindEvents();
}
init();
})();
</script>
</body>
</html>
核心功能与操作说明
您可以通过修改数字框来实时更新统计结果,页面会自动计算并比较两队的总牌数。

- 数据输入:每个队伍下方都设有“黄牌”和“红牌”的数字输入框,您可以直接点击输入框来修改数量,所有统计都会实时更新。
- 结果比较:页面中央会醒目地显示哪一队的总牌数更多,并给出具体的数字对比,下方的细项还会分别对比黄牌和红牌的数量。
- 数据重置:如果您想恢复初始的示例数据(主队2黄0红,客队3黄1红),可以点击底部的“重置”按钮。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播