在我居住的丹麦,不幸的是,我们在欧洲保持着一项记录:我们的孩子是欧洲大陆饮酒最多的人。正因为如此,人们非常关注减少青少年饮酒量并教育孩子们了解酒精的影响。 我为当地学校编写了一个 HTML 和 JavaScript 酒精计算器,向学生展示酒精如何影响身体以及如何计算血液酒精含量 (BAC)。 BAC是如何计算的? 要估算 BAC 或“promille”,您需要一些关键信息: 您的体重 – 因为较大的身体比较小的身体更能稀释酒精。 生物性别 – 由于体内水分含量不同,从而影响酒精在体内的分布。 消耗的酒精单位数 – 因为每种饮料都有不同的酒精浓度。 计算酒精单位 不同的饮料会向您的血液贡献不同量的酒精,具体取决于其体积和酒精浓度。为了标准化,酒精的单位计算通常如下: volume (cl) * alcohol percentage * 0.8 / 120 结构 整个“应用程序”的结构是一个 ;具有有组织的字段集和命名控件,可以轻松地使用以下方式提取必要的元素: const { add, addbeverage, etc. } = app.elements; 由于BAC限制因地区而异,我们需要首先选择地区,调整体重滑块,并选择生物性别: 接下来,我们可以开始添加饮料了: 这是一个简单的 ,其中单位、体积和酒精百分比的各个字段均被禁用(并通过 CSS 隐藏),直到您从饮料选择器中进行选择: 这些字段的可见性由enableElements函数控制: [percentage, units, volume].forEach(el => el.disabled = !bool); 当我们添加饮料时,会创建一份消耗饮料列表,并计算 BAC、预计醒酒时间等: 然后您可以继续添加更多饮料,BAC 也会相应更新: 令我非常惊讶的是,美国的合法BAC是瑞典或挪威的四倍! 换句话说,在瑞典,您可能吊销执照,因为饮酒量达到了美国法律允许的量 分解 BAC 计算 BAC的核心计算在calculateAnswer函数中处理: volume (cl) * alcohol percentage * 0.8 / 120 让我们来分解一下: 酒精代谢率:alcoholMetabolismRate = 0.015 该值代表身体每小时减少 BAC 的平均速率(约 0.015%)。 计算当前 BAC: currentBAC = ((total * 10) / ((weight.valueAsNumber * 1000) * parseFloat(bodywater.value))) * 100 总计 * 10:这会将消耗的总酒精单位转换为克(因为 1 个单位约等于 10 克纯酒精)。 weight.valueAsNumber * 1000:将体重从公斤转换为克以供计算。 bodywater.value:基于生物性别的小数因子,影响酒精在体内的分布(例如,男性为 0.58,女性为 0.49)。 然后将结果乘以 100,将 BAC 转换为百分比。 估计清醒时间:hoursToSober = (currentBAC / alcoholMetabolismRate).toFixed(1); 将当前 BAC 除以新陈代谢率即可估算 BAC 达到零所需的时间。 判断合法驾驶状态: canDrive = currentBAC 将当前 BAC 与选定的法定 BAC 限值进行比较。如果当前BAC在限制范围内,则认为用户“适合驾驶”;否则,他们就不是。 calculateAnswer 函数然后将这些值组合成一条消息,显示当前的 BAC、清醒前的小时数以及用户是否适合驾驶。 …本教程就到此结束。如果您愿意,可以随意尝试 CodePen——也许可以创建一个对儿童更友好的用户体验。请记住,该工具提供了估计值,但没有考虑您饮用每种饮料的时间等因素。请记住,它很可能会被清醒的人使用! 演示 封面由DALL·E,提示:以类似于早期迪士尼和茶杯头的卡通风格生成一辆醉车,作为图像我可以裁剪到1000x420px。