Files
mama-box/topic/xuexing-js/index.html

108 lines
8.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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=26110459">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110459">
<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=26110459"></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=26110459"></script>
<script>window.mbShare('../../assets/share/t/xuexing-js.jpg', '宝宝血型推算:爸妈血型配宝宝会是什么型'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110459"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>