前端例程20211122:盐酸与氢氧化钠溶液中和pH计算工具

2023-11-13

前言

偶然的一个同事的工作需要计算盐酸与氢氧化钠溶液中和滴定过程的pH值,这里稍微对这个计算功能的实现做下记录。

功能演示

在这里插入图片描述
上图两个溶液体积滑动条变动后单位有误,下面代码中已修正

代码实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="author" content="Naisu">
    <title>盐酸与氢氧化钠溶液中和pH计算</title>
    <style>
        body {
            font-size: 1.25rem;
            display: grid;
            grid-template-columns: 14rem 1fr 8rem;
        }

        span {
            height: 1.5rem;
            grid-column: 1 / 5;
        }

        h2 {
            grid-column: 1 / 5;
        }
    </style>
    <script>
        function getEl(selectors) {
            return document.querySelector(selectors);
        }

        let rgehc;
        let rgehv;
        let rgeohc;
        let rgeohv;
        let lblhc;
        let lblhv;
        let lblohc;
        let lblohv;
        let lblnewv;
        let lblnewhc;
        let lblnewnohc;
        let lblph;

        let hc = 0.10;
        let hv = 0.00;
        let ohc = 0.10;
        let ohv = 0.00;

        let newv = 0.00;
        let newhc = 0.000000;
        let newohc = 0.000000;
        let ph = 7.00;

        function cal() {
            let newv = hv + ohv;

            let oldhc = hc * hv;
            let oldohc = ohc * ohv;

            let dvalu = oldhc - oldohc;

            if (Math.abs(dvalu) < Number.EPSILON) { // 完全中和
                newhc = 0.000000;
                newohc = 0.000000;
                ph = 7.00;
            } else if (dvalu > Number.EPSILON) { // H+ 多
                newhc = dvalu / newv;
                newohc = 0.000000;
                ph = -Math.log10(newhc);
            } else if (dvalu < -Number.EPSILON) { // OH+ 多
                newhc = 0.000000;
                newohc = (-dvalu) / newv;
                ph = 14 + Math.log10(newohc);
            }

            lblnewv.innerText = `${newv.toFixed(2)} mL`;
            lblnewhc.innerText = `${newhc.toFixed(6)} mol/L`;
            lblnewnohc.innerText = `${newohc.toFixed(6)} mol/L`;
            lblph.innerText = `${ph.toFixed(2)}`;
        }

        onload = () => {
            rgehc = getEl('#rgehc');
            rgehv = getEl('#rgehv');
            rgeohc = getEl('#rgeohc');
            rgeohv = getEl('#rgeohv');
            lblhc = getEl('#lblhc');
            lblhv = getEl('#lblhv');
            lblohc = getEl('#lblohc');
            lblohv = getEl('#lblohv');
            lblnewv = getEl('#lblnewv');
            lblnewhc = getEl('#lblnewhc');
            lblnewnohc = getEl('#lblnewnohc');
            lblph = getEl('#lblph');

            rgehc.oninput = () => {
                hc = Number(rgehc.value);
                lblhc.innerText = ` ${hc.toFixed(2)} mol/L`;
                cal();
            }

            rgehv.oninput = () => {
                hv = Number(rgehv.value);
                lblhv.innerText = ` ${hv.toFixed(2)} ml/L`;
                cal();
            }

            rgeohc.oninput = () => {
                ohc = Number(rgeohc.value);
                lblohc.innerText = ` ${ohc.toFixed(2)} mol/L`;
                cal();
            }

            rgeohv.oninput = () => {
                ohv = Number(rgeohv.value);
                lblohv.innerText = ` ${ohv.toFixed(2)} ml/L`;
                cal();
            }
        }

    </script>
</head>

<body>
    <h2>盐酸与氢氧化钠溶液中和pH计算</h2>
    <span></span>
    <span>滚动条选中后可以使用键盘方向键微调</span>
    <span></span>
    <div>盐酸溶液浓度</div>
    <input type="range" min="0.10" max="12.00" step="0.10" value="0.10" id="rgehc">
    <div id="lblhc"> 0.10 mol/L</div>
    <span></span>
    <div>盐酸溶液体积</div>
    <input type="range" min="0.00" max="100.00" step="0.05" value="0.00" id="rgehv">
    <div id="lblhv"> 0.00 mL</div>
    <span></span>
    <div>氢氧化钠溶液浓度</div>
    <input type="range" min="0.10" max="20.00" step="0.10" value="0.10" id="rgeohc">
    <div id="lblohc"> 0.10 mol/L</div>
    <span></span>
    <div>氢氧化钠溶液体积</div>
    <input type="range" min="0.00" max="100.00" step="0.05" value="0.00" id="rgeohv">
    <div id="lblohv"> 0.00 mL</div>
    <span></span>
    <div>混合溶液体积为</div>
    <div id="lblnewv">0.00 mL</div>
    <span></span>
    <div>混合溶液 H+ 浓度约为</div>
    <div id="lblnewhc">0.000000 mol/L</div>
    <span></span>
    <div>混合溶液 OH- 浓度约为</div>
    <div id="lblnewnohc">0.000000 mol/L</div>
    <span></span>
    <div>混合溶液pH值</div>
    <div id="lblph">7.00</div>
</body>

</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端例程20211122:盐酸与氢氧化钠溶液中和pH计算工具 的相关文章

  • 微星b560m mortar wifi 开机二检(开机灭了1秒后自动重启)

    微星b560m mortar wifi 开机二检 开机灭了1秒后自动重启 1 起因 为了照顾旧CPU 还想把内存扩容到64GB 就选择了DDR4的4条插槽的 B560M主板 都弄好之后 开机发现在按下电源键之后 通电自检后断电了大概2秒左右
  • ESLint(JavaScript代码校验)

    概要 关于JavaScript的代码校验 2016年5月以来大家一直使用jswatchdog 2018年4月以后 从运维的角度上来说 我们更推荐使用ESLint 关于ESLint的设置 我们更推荐有利于kintone自定义开发的eslint

随机推荐

  • java报错信息--Spring篇【1】

    报错信息一 时间 学习spring的aop容器 xml形式配置aop功能 起因 测试xml形式配置好的aop功能 经过 在运行junit测试时出现以下报错信息 警告 Exception encountered during context
  • python 10行代码生成词云图片(基础词云、形状词云)

    一 词云简介 词云 也称为文本云或标签云 在词云图片中 关键词在文本中出现的次数越多 则表示该词越重要 其在词云中所占面积区域也越大 出现次数越少 所占面积越小 词云可任意更换背景为白色的图形以改变词云形状 二 WordCloud原理简介
  • 2003 - Can't connect to MySQL server on解决方法

    前提 已经授权root开启远程访问 这种问题非常容易确定 就是无法连接 原因入下 一 90 的问题是因为防火墙屏蔽 比如我自己在Windows上安装了mysql5 6 用Navicat远程连接提示这个错误 以Windows防火墙为例 同理可
  • Ubuntu中安装PBC库

    1 下载GNU 首先要安装GNU GNU是一个开源的数学运算库 它可以用于任意精度的数学运算 包括有符号整数 有理数和浮点数 它本身并没有精度限制 只取决于机器的硬件情况 给上连接地址 The GNU MP Bignum Library g
  • 高CPU问题----eth0: NIC Link is Down网卡故障导致高CPU

    一 现象 cpu异常飙升 这台机器的eth0网卡在2018年12月的时候就出现问题 二 分析发现 1 dmesg Thu Mar 14 01 02 00 2019 ixgbe 0000 02 00 0 eth0 NIC Link is Do
  • 内核补丁 — OpenWRT

    目前本人遇到过两种情况的内核补丁 一种是 build dri目录中内核文件夹下存在 patches目录 另外一种是内核目录下不存在 patches目录的 第一种情况可以直接在内核目录下使用 quilt命令进行新建和保存补丁 而第二种情况无法
  • 笔试题5:Java可以用非0来带代表true吗?

    Java 是一种强类型的语言 Java不能用非0代表true 也不能用0代表false 只能用布尔型的true和false来进行条件判断
  • 测试质量报告

    一 总结 1 1产品线分布 1 2前后端分布 二 重点跟进事项 2 1问题落实信息 2 2 关键文档信息 三 问题分析 3 1 趋势 3 1 1总体趋势 3 1 2业务线趋势 3 1 3业务线趋势 3 2 业务模块分布 3 3 严重程度分布
  • Visual Commonsense R-CNN (CVPR2020)

    这篇文章比较早 但是对于因果介绍的比较详细 很值得学习 代码 https github com Wangt CN VC R CNN 代码花了挺长时间总算跑通了 在 3080 上调真是错误不断 后来换到 2080 又是一顿调才好 这里跑通的主
  • Vue环形进度条

    环形进度条可设置背景颜色 遮罩层 文字 百分值默认保存两位小数 sizeOut 底圈半径 Number 默认值 100 sizeIn里圈半径 Number 默认值 80 size进度条大小 Number 默认值 10 注意 需要满足size
  • 《R语言实战》学习笔记:第三章 图像初阶

    R语言实战 学习笔记 第一章 R语言介绍 R语言实战 学习笔记 第二章 创建数据集 R语言实战 学习笔记 第四章 基本数据管理 R语言实战 学习笔记 第五章 高级数据管理 图像初阶 同时打开多幅图像 方法一 在创建一幅新图形之前打开一个新的
  • 使用预训练好的 DALLE 模型进行 Text-to-Image 生成图像

    使用预训练好的 DALLE 模型进行 Text to Image 任务 Hugging Face 文档 https huggingface co kuprel min dalle 安装库 pip install min dalle 本文使用
  • 钉钉考勤与企业系统对接

    公司最近企业系统要与钉钉考勤打卡数据对接 所以需要拿到钉钉上月员工的考勤打卡数据 配置了spring定时任务 任务类步骤如下 引入钉钉相关JAR包 一 获得tooken 1 需要公司钉钉管理员给开发人员开放考勤权限 2 开发人员登录钉钉开放
  • 一文看懂Linux基础

    文章目录 什么是Linux操作系统 window和linux的对比 快照的拍摄 Linux的文件结构 kali Linux的简单介绍 基础命令 vim命令 文件权限 kali的常见工具 查看命令 1 查看操作 2 删除操作 3 复制操作 4
  • 学完Python,我决定熬夜整理这篇总结...

    前言 学习Python 我决定熬夜整理这篇总结 目录 了解Python Python基础语法 Python数据结构 数值 字符串 列表 元组 字典 集合 Python控制流 if 判断语句 for 循环语句 while 循环语句 break
  • 【无标题】C语言编写一个简单答题系统

    这是蒟蒻写的第一个博客 将就看看吧 首先 我写的是一个填空题答题系统 填空题数目为20 其次 需要随机出题 题目出现顺序要不一致 1 产生随机数 1 20 2 解决运气不好的问题1 18 极少出现19 20 然后 及时反馈正确情况 记录同学
  • TypeScript 自定义数组排序

    TypeScript 自定义数组排序 前言 代码 基本原理 基本类型排序 复杂类型排序 前言 对列表进行排序 根据自定义规则 代码 基本原理 sort使用属性相减 a b 获取一个基本类型 1 0 1 如果小于0则将元素放到前面 如果大于0
  • 《数据处理与知识发现》章节测验复习

    数据处理与知识发现 章节测验 第1章 绪论 章节测验 第2章 数据预处理 章节测验 第3章 数据仓库 章节测验 第4章 关联规则挖掘 章节测验 第5章 聚类分析方法 章节测验 第6章 分类规则挖掘 章节测验 首先我们要明白关联分析 聚类分析
  • Flutter的FittedBox控件

    简介 FittedBox是Flutter中的一个控件 它用于调整其子控件的大小以适应可用空间 它会根据子控件的大小和可用空间的大小 自动进行缩放或拉伸操作 以使子控件恰好填充可用空间 属性 FittedBox的常用属性包括 fit 指定子控
  • 前端例程20211122:盐酸与氢氧化钠溶液中和pH计算工具

    文章目录 前言 功能演示 代码实现 前言 偶然的一个同事的工作需要计算盐酸与氢氧化钠溶液中和滴定过程的pH值 这里稍微对这个计算功能的实现做下记录 功能演示 上图两个溶液体积滑动条变动后单位有误 下面代码中已修正 代码实现