108 lines
8.3 KiB
HTML
108 lines
8.3 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
|
||
<meta name="format-detection" content="telephone=no">
|
||
<title>宝宝血型推算</title>
|
||
<!-- 孕期计算器 · 宝宝血型推算(2026-11-04 用户从 20 个备选里选了带星的 10 个,本页是其中之一)。
|
||
ABO 按孟德尔遗传:先由爸妈的表现型推出各自基因型的概率(汉族人群等位基因频率约 A 0.23、B 0.21、O 0.56,对应 A 31% / B 28% / O 31% / AB 10%),
|
||
再组合出宝宝每种血型的概率;Rh 同理(汉族 Rh 阴性约 0.3%,d 等位基因约 0.055)。
|
||
顺带提示两种溶血风险:妈妈 Rh 阴性 + 爸爸 Rh 阳性(Rh 溶血,要查抗 D 抗体);妈妈 O 型 + 爸爸非 O 型(ABO 溶血,多数轻)。
|
||
顺式 AB(cis-AB)、孟买型等罕见情况不算,页面写明。
|
||
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
|
||
<link rel="stylesheet" href="../_shared/calc.css?v=26110441">
|
||
<link rel="stylesheet" href="../_shared/wizard.css?v=26110441">
|
||
<style>:root{--c:#D9475A;--c2:#FF8A96;--cbg:#FFEDEF}.bars{margin-top:12px}.bars div{display:flex;align-items:center;gap:8px;margin-top:6px}.bars b{flex:none;width:44px;font-size:16px}.bars i{flex:1;height:12px;border-radius:99px;background:rgba(255,255,255,.25);overflow:hidden}.bars i u{display:block;height:100%;border-radius:99px;background:#fff}.bars span{flex:none;width:52px;text-align:right;font-size:14px;font-weight:800}.bars .no{opacity:.45}</style>
|
||
</head>
|
||
<body>
|
||
<div id="scroll">
|
||
<header class="bar" id="bar">
|
||
<button class="back" id="back" aria-label="返回"><svg viewBox="0 0 24 24"><path d="M15 5l-7 7 7 7"/></svg></button>
|
||
<span class="t">孕期计算器</span>
|
||
</header>
|
||
<section class="hd"><p>孕期计算器</p><h1>宝宝血型推算</h1><span>按爸妈血型,算宝宝可能是什么血型</span></section>
|
||
<section class="calc">
|
||
<div class="res" id="res"><div class="empty">选好爸爸妈妈的血型,马上算出来</div></div>
|
||
<div class="fld"><span class="lb">爸爸的血型</span><div class="seg s4" id="cF"><button type="button" data-v="A">A</button><button type="button" data-v="B">B</button><button type="button" data-v="AB">AB</button><button type="button" data-v="O">O</button></div>
|
||
<div class="seg s2" id="cFr"><button type="button" data-v="+">Rh 阳性</button><button type="button" data-v="-">Rh 阴性</button></div></div>
|
||
<div class="fld"><span class="lb">妈妈的血型</span><div class="seg s4" id="cM"><button type="button" data-v="A">A</button><button type="button" data-v="B">B</button><button type="button" data-v="AB">AB</button><button type="button" data-v="O">O</button></div>
|
||
<div class="seg s2" id="cMr"><button type="button" data-v="+">Rh 阳性</button><button type="button" data-v="-">Rh 阴性</button></div>
|
||
<span class="hint">不知道 Rh 就选阳性(中国人 99.7% 是阳性);妈妈的血型产检第一次抽血就会查</span></div>
|
||
</section>
|
||
|
||
<section class="sec hide" id="sRisk">
|
||
<h2>要留意的</h2>
|
||
<div class="cards" id="risk"></div>
|
||
</section>
|
||
|
||
<section class="sec">
|
||
<h2>血型遗传对照表</h2>
|
||
<p class="lead">只看 ABO,「可能」按概率从高到低</p>
|
||
<table class="tbl" id="tbl"><thead><tr><th>爸妈血型</th><th>宝宝可能</th><th>宝宝不可能</th></tr></thead><tbody></tbody></table>
|
||
</section>
|
||
|
||
<p class="foot">按常规遗传规律估算,不能用来做亲子鉴定;顺式 AB、孟买型等罕见血型不在计算范围。</p>
|
||
</div>
|
||
<script src="../_shared/calc.js?v=26110441"></script>
|
||
<script>
|
||
(function () {
|
||
'use strict';
|
||
var C = window.CK, $ = C.$;
|
||
C.shell();
|
||
var FQ = { A: .23, B: .21, O: .56 }, D = .055;
|
||
/* 表现型 → 基因型(两个等位基因)及其相对概率 */
|
||
function geno(p) {
|
||
var a = FQ.A, b = FQ.B, o = FQ.O, L = { A: [['A', 'A', a * a], ['A', 'O', 2 * a * o]], B: [['B', 'B', b * b], ['B', 'O', 2 * b * o]], AB: [['A', 'B', 1]], O: [['O', 'O', 1]] }[p];
|
||
var s = L.reduce(function (x, g) { return x + g[2]; }, 0); return L.map(function (g) { return [g[0], g[1], g[2] / s]; });
|
||
}
|
||
function pheno(x, y) { var s = [x, y].sort().join(''); return s === 'AB' ? 'AB' : s.indexOf('A') >= 0 ? 'A' : s.indexOf('B') >= 0 ? 'B' : 'O'; }
|
||
function kid(f, m) {
|
||
var r = { A: 0, B: 0, AB: 0, O: 0 };
|
||
geno(f).forEach(function (g) { geno(m).forEach(function (h) { [g[0], g[1]].forEach(function (x) { [h[0], h[1]].forEach(function (y) { r[pheno(x, y)] += g[2] * h[2] / 4; }); }); }); });
|
||
return r;
|
||
}
|
||
function rhNeg(f, m) { /* 宝宝 Rh 阴性的概率 */
|
||
function pd(r) { if (r === '-') return 1; var dd = 2 * D * (1 - D), DD = (1 - D) * (1 - D); return dd / (dd + DD) / 2; } /* 给出 d 的概率 */
|
||
return pd(f) * pd(m);
|
||
}
|
||
var st = C.store('mmbox.calc.xuexing', { f: '', m: '', fr: '+', mr: '+' });
|
||
C.seg($('#cF'), st, 'f', paint); C.seg($('#cM'), st, 'm', paint); C.seg($('#cFr'), st, 'fr', paint); C.seg($('#cMr'), st, 'mr', paint);
|
||
var T4 = ['A', 'B', 'AB', 'O'];
|
||
function pct(x) { return x <= 0 ? '0' : x < .01 ? '<1%' : Math.round(x * 100) + '%'; }
|
||
(function table() {
|
||
var h = '';
|
||
T4.forEach(function (f, i) { T4.slice(i).forEach(function (m) {
|
||
var r = kid(f, m), yes = T4.filter(function (t) { return r[t] > 1e-9; }).sort(function (a, b) { return r[b] - r[a]; }), no = T4.filter(function (t) { return r[t] <= 1e-9; });
|
||
h += '<tr data-k="' + [f, m].sort().join('-') + '"><td><b>' + f + ' + ' + m + '</b></td><td>' + yes.join('、') + '</td><td>' + (no.join('、') || '—') + '</td></tr>';
|
||
}); });
|
||
$('#tbl tbody').innerHTML = h;
|
||
})();
|
||
function paint() {
|
||
st.save();
|
||
var R = $('#res');
|
||
[].forEach.call($('#tbl tbody').children, function (tr) { tr.classList.toggle('on', st.f && st.m && tr.dataset.k === [st.f, st.m].sort().join('-')); });
|
||
if (!st.f || !st.m) { R.innerHTML = '<div class="empty">选好爸爸妈妈的血型,马上算出来</div>'; $('#sRisk').classList.add('hide'); return; }
|
||
var r = kid(st.f, st.m), ord = T4.slice().sort(function (a, b) { return r[b] - r[a]; }), neg = rhNeg(st.fr, st.mr);
|
||
R.innerHTML = '<small>爸爸 ' + st.f + ' 型 + 妈妈 ' + st.m + ' 型,宝宝可能是</small><div class="bars">' + ord.map(function (t) {
|
||
return '<div class="' + (r[t] > 1e-9 ? '' : 'no') + '"><b>' + t + ' 型</b><i><u style="width:' + (r[t] * 100).toFixed(1) + '%"></u></i><span class="num">' + (r[t] > 1e-9 ? pct(r[t]) : '不可能') + '</span></div>';
|
||
}).join('') + '</div><span class="note">Rh:宝宝' + (neg >= .999 ? '一定是 Rh 阴性' : neg < .005 ? '几乎都是 Rh 阳性' : '是 Rh 阴性的概率约 ' + pct(neg)) + '。概率按中国汉族人群血型分布推算。</span>';
|
||
var rk = [];
|
||
if (st.mr === '-' && st.fr === '+') rk.push(['Rh 溶血要重视', '妈妈 Rh 阴性、爸爸 Rh 阳性,宝宝可能是 Rh 阳性。产检时要查抗 D 抗体,孕 28 周左右和产后 72 小时内医生可能会建议打抗 D 免疫球蛋白,一定主动告诉医生。']);
|
||
if (st.mr === '-' && st.fr === '-') rk.push(['都是 Rh 阴性', '宝宝也是 Rh 阴性,不会有 Rh 溶血;Rh 阴性血源紧张,提前告诉生产医院备血。']);
|
||
if (st.m === 'O' && st.f !== 'O') rk.push(['可能有 ABO 溶血', '妈妈 O 型、爸爸不是 O 型,宝宝可能出现 ABO 溶血,多数很轻,表现为黄疸偏重、退得慢。不用太担心,产后留意宝宝黄疸就好;有的医院孕期会查抗体效价。']);
|
||
$('#sRisk').classList.toggle('hide', !rk.length);
|
||
$('#risk').innerHTML = rk.map(function (x) { return '<div class="cd"><div class="k"><b>' + x[0] + '</b></div><p>' + x[1] + '</p></div>'; }).join('');
|
||
}
|
||
paint();
|
||
})();
|
||
</script>
|
||
<script src="../_shared/brand.js?v=26110203"></script>
|
||
<script src="../../js/share-card.js?v=26110441"></script>
|
||
<script>window.mbShare('../../assets/share/t/xuexing-js.jpg', '宝宝血型推算:爸妈血型配宝宝会是什么型'); /* 11-04 微信转发图 */</script>
|
||
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
|
||
<script src="../_shared/wizard.js?v=26110441"></script>
|
||
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
|
||
</body>
|
||
</html>
|