js网页简易计算器

【JavaScript项目】如何用JavaScript实现 计算器?(附完整源码) 实现了如上图所示的一般计算器的功能包括(1)加、减、乘、除、取余这样的基本运算(好像计算器“%”这个符号不是取余,是百分号的意思,但在这里是取余的意思)(2)还有功能按键按键:退格,清空,按键“+/-”是给当前数字取相反数的意思(3)最上面的长格子用来显示输入的算式,点击“=”号后会变成计算后结果(4)有一定交互响应,比如鼠标放在按键上,按键颜色会变深。 阅读详情

野路子新人学习过程中的产物,参照知乎上的一篇文章里的练习做的(第三课第七个),有不符合科班出身常识的地方请指正。
因为大幅改过布局,所以会有些比较奇怪的标签用法,见谅。
截图:
截图

布局:

<body>
    <div id="Cbody">
        <p id="name">By-mirai2333</p>
        <div id="displayArea">0</div>
        <p id="num"></p>
        <div>
            <ul>
                <button class="clear">C</button>
                <button class="symbols">%</button>
                <button class="symbols">/</button>
                <button class="symbols">*</button>
                <button class="numbers">7</button>
                <button class="numbers">8</button>
                <button class="numbers">9</button>
                <button class="symbols">-</button>
                <button class="numbers">4</button>
                <button class="numbers">5</button>
                <button class="numbers">6</button>
                <button class="symbols">+</button>
                <button class="numbers">1</button>
                <button class="numbers">2</button>
                <button class="numbers">3</button>
                <button class="equal">=</button>
                <button class="zero">0</button>
                <button class="numbers">.</button>
            </ul>
        </div>
    </div>
</body>

样式:

    <style type="text/css">
        body{text-align: center;color: white;overflow: hidden;}
        p{margin: 0px;height: 20px;}
        ul{margin: 0px 0px 15px 12px;padding: 0px;position: relative;overflow: hidden;}
        button{margin: 16px 12px 0px 0px;padding: 0px; float: left;width: 60px;height: 40px;font-size: 20px;}
        #name{height: 20px;margin: 0px 3px 0px 3px;text-align: right;}
        #Cbody{width: 300px;height: 400px;background: black;margin: auto;}
        #displayArea{height: 84px;font:700 50px/100px Arial;background: #EEEEE0;color: black;text-align: right;}
        #num{font: 100 15px/20px Arial;position: absolute;top: 28px;left: 618px;width: 300px;height: 20px;color: black;text-align: right;}
        .zero{width: 132px;}
        .equal{height: 96px;position: absolute;bottom: 0px;right: 0px;}
    </style>

js的思路是这样的:所有的操作都是针对显示部分,显示部分分为当前显示和已经成型的表达式。(以下简称为“当前”和“已经”)
共有三个状态:

  • 当前是数字,已经是符号或空(发生在键入符号后再键入数字,或初始状态)
    状态一空
    状态一符号
  • 当前和已经都是符号(发生在键入符号后)
    状态二
  • 当前和已经都是数字(发生在键入等号后)
    状态三
    三类按钮“数字”“符号”“等号”的onclick事件都是按照上述三个状态进行处理,“等号”把要计算的表达式整理放入已经,然后用eval()函数计算。
    JavaScript:
    <script type="text/javascript">
        window.onload=function(){
            var current = document.getElementById('displayArea');
            var already = document.getElementById('num');
            var buttons = document.getElementsByTagName('button');
            for (var i = 0; i < buttons.length; i++) {
                //数字键的单击事件
                if (buttons[i].className=="numbers"||buttons[i].className=="zero") {
                    buttons[i].onclick=function(){
                        //外层循环是为了配合里面的替换,处理符号加点的情况
                        if (!(/[\%\/\*\-\+]$/.test(current.innerText)&&this.innerHTML==".")) {
                            if (current.innerText.length<10) {
                                current.innerText+=this.innerHTML;
                                var text = current.innerText.replace(/^[0\%\/\*\-\+](\d)/,"$1");
                                current.innerText=text;
                            }
                        }
                    }
                //符号键的单击事件
                }else if (buttons[i].className=="symbols") {
                    buttons[i].onclick=function(){
                        //对应状态二,此时要把旧符号换成新的,依旧是状态二
                        if (/[\%\/\*\-\+]$/.test(current.innerText)) {
                            var text = already.innerHTML.replace(/([\%\/\*\-\+])$/,this.innerHTML);
                            already.innerHTML=text;
                            current.innerText=this.innerHTML;
                        //对应状态一,此时把当前数字移入已经并添加符号,变成状态二
                        }else if (/[\%\/\*\-\+\=]$/.test(already.innerHTML)){
                            already.innerHTML+=current.innerText+this.innerHTML;
                            current.innerText=this.innerHTML;
                        //对应状态三,把结果移入已经并添加符号,变成状态二
                        }else{
                            already.innerHTML = current.innerText+this.innerHTML;
                            current.innerText = this.innerHTML
                        }
                    }
                //清除
                }else if(buttons[i].className=="clear"){
                    buttons[i].onclick=function(){
                        already.innerHTML="";
                        current.innerText="0";
                    }
                //等号
                }else{
                    buttons[i].onclick=function(){
                        //状态二,去除符号并计算显示
                        if (/[\%\/\*\-\+\=]$/.test(current.innerText)) {
                            var text = already.innerHTML.replace(/([\%\/\*\-\+])$/,"");
                            already.innerHTML=text;
                            var text = eval(already.innerHTML);
                            current.innerText=text.toString().substr(0,10);
                        //状态一,当前移入已经并计算显示
                        }else if (/[\%\/\*\-\+\=]$/.test(already.innerHTML)) {
                            already.innerHTML+=current.innerText;
                            current.innerText=this.innerHTML;
                            var text = eval(already.innerHTML);
                            current.innerText=text.toString().substr(0,10);
                        }
                    }
                }
            }
        }
    </script>

下面附上知乎大佬的代码作为参考:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body,div,p,ul,li,input{margin:0;padding:0;}
ul{list-style-type:none;}
a{color:#fff;outline:none;text-decoration:none;}
body{font:700 24px/1.5 Arial;}
#calc{position:relative;width:300px;background:#000;margin:10px auto;}
#calc p{color:#fff;text-align:right;font:12px/20px Arial;padding:0 5px;}
#calc .f-text{border:0;width:290px;height:84px;text-align:right;font:700 50px/84px Arial;background:url(img/inputBg.jpg) repeat-x;padding:0 5px;}
#calc ul{position:relative;overflow:hidden;zoom:1;background:url(img/bg.jpg);padding:0 0 17px 8px;}
#calc ul li{float:left;width:63px;height:41px;margin:17px 10px 0 0;}
#calc ul li a{display:block;width:63px;height:41px;line-height:41px;text-align:center;background:url(img/btn.png) no-repeat;}
#calc ul li a:hover{background-position:-63px 0;}
#calc ul li.btn-1 a{background-position:0 -41px;}
#calc ul li.btn-1 a:hover{background-position:-63px -41px;}
#calc ul li.btn-2{position:absolute;top:174px;right:0;height:99px;}
#calc ul li.btn-2 a{height:99px;line-height:99px;background-position:0 -164px;}
#calc ul li.btn-2 a:hover{background-position:-63px -164px;}
#calc ul li.btn-3{width:136px;}
#calc ul li.btn-3 a{width:136px;background-position:0 -82px;}
#calc ul li.btn-3 a:hover{background-position:0 -123px;}
#formula{position:absolute;top:20px;background:none;border:0;font:700 12px/1.5 Arial;width:280px;padding:3px 15px 0 5px;text-align:right;}
</style>
<script>
window.onload = function ()
{
    var oCalc = document.getElementById("calc");
    var aA = oCalc.getElementsByTagName("a");
    var aInput = oCalc.getElementsByTagName("input")[0];
    var oFormula = document.getElementById("formula");
    var s = false;
    var i = 0;

    for (i = 0; i < aA.length; i++){
        aA[i].onfocus = function ()
        {
            this.blur() 
        };
        aA[i].onclick = function ()
        {
            switch(this.innerHTML)
            {
                case "c":
                    aInput.value =  0;
                    oFormula.value = "";
                    break;
                case "%":
                    count("%")
                    break;
                case "÷":
                    count("/")
                    break;
                case "×":
                    count("*")
                    break;
                case "-":
                    count("-")
                    break;
                case "+":
                    count("+")
                    break;
                case "=":
                    s || (oFormula.value += aInput.value);
                    aInput.value = eval(oFormula.value.replace(/\%\/\*\-\+/,''));
                    aInput.value = aInput.value.substr(0,10).replace("NaN",0);
                    s = true;
                    break;
                case ".":
                    if(aInput.value.search(/[\.\%\/\*\-\+]/) != -1)
                    break;
                default:
                    s && (aInput.value = 0, oFormula.value = "", s = false);
                    aInput.value.length < 10 && (aInput.value = (aInput.value + this.innerHTML).replace(/^[0\%\/\*\-\+](\d)/,"$1"));
            }
        }   
    }

    function count(a)
    {

        if(s)
        {
            oFormula.value = aInput.value + a;
            aInput.value = a;   
            s = false;
        }
        else
        {
            /[\%\/\*\-\+]$/.test(aInput.value) || (oFormula.value += aInput.value);
            aInput.value = a;
            /[\%\/\*\-\+]$/.test(oFormula.value) || (oFormula.value += aInput.value);
            oFormula.value = oFormula.value.slice(-1) != a ? oFormula.value.replace(/.$/,a) : oFormula.value
        }
    }
}
</script>
<title>网页计算器</title>
</head>
<body>
<div id="calc">
    <p>By - Ferris QQ:21314130</p>
    <input class="f-text" type="text" readonly="readonly" maxlength="9" value="0" />
    <ul>
        <li class="btn-1"><a href="javascript:void(0)">c</a></li>
        <li class="btn-1"><a href="javascript:void(0)">%</a></li>
        <li class="btn-1"><a href="javascript:void(0)">÷</a></li>
        <li class="btn-1"><a href="javascript:void(0)">×</a></li>
        <li><a href="javascript:void(0)">7</a></li>
        <li><a href="javascript:void(0)">8</a></li>
        <li><a href="javascript:void(0)">9</a></li>
        <li class="btn-1"><a href="javascript:void(0)">-</a></li>
        <li><a href="javascript:void(0)">4</a></li>
        <li><a href="javascript:void(0)">5</a></li>
        <li><a href="javascript:void(0)">6</a></li>
        <li class="btn-1"><a href="javascript:void(0)">+</a></li>
        <li><a href="javascript:void(0)">1</a></li>
        <li><a href="javascript:void(0)">2</a></li>
        <li><a href="javascript:void(0)">3</a></li>
        <li class="btn-2"><a href="javascript:void(0)">=</a></li>
        <li class="btn-3"><a href="javascript:void(0)">0</a></li>
        <li><a href="javascript:void(0)">.</a></li>
    </ul>
    <input id="formula" type="text" readonly="readonly" value="" />
</div>
</body>
</html>

大佬的截图:
大佬的截图

JS实现简易网页计算器 js实现简易计算器。计算器的布局不像表格那么公正对称,所以布局这块相对比较繁琐,但是也可以通过这来练习一下CSS。 一、实现功能 完成计算器的加减乘除的基本计算功能 实现输入框中的字符串拼接 二、实现思路 完成基本布局 js实现运算功能 三、知识点 e.target||e.srcElement :获取触发事件的元素 四、具体代码实现 &lt;!DOCTYPE html&gt; &... 阅读详情

相关推荐

JavaScript简易网页计算器

JavaScript简易网页计算器 带时间显示功能的网页计算器,显示效果如图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>calculator</title> <style> .form{ border: 2px solid gold; b

lwangji的博客 1633

JavaScript 网页简易计算器

JavaScript 设计简易计算器

weixin_62630571的博客 990

使用js实现一个简易计算器的HTML网页

个人的一个小作业,仅供参考,希望对你有所帮助。 界面: 代码: <!DOCTYPE html> <!-- 计算器 --> <!-- getElementsByClassName() 方法返回文档中所有指定类名的元素集合,作为 NodeList 对象。NodeList 对象代表一个有顺序的节点列表。NodeList 对象 我们可通过节点列表中的节点索引号来访问列表中的节点(索引号由0开始)。 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。

lgd123abc的博客 1270

js_实现网页中简易计算器

网页中实现简易的计算器功能

zl202111的博客 1022

web网页设计-计算器HTML5+CSS+JS

网页设计-计算器,实现简易版计算器功能

2301_78735487的博客 781

构建简易网页计算器:jQuery与JavaScript实战

除了浏览器原生事件之外,开发者也可以创建和触发自定义事件。这在复杂的前端应用中特别有用,例如,在组件化开发中,某个组件可能需要通知其他组件一些事件,这时可以通过自定义事件来实现。自定义事件可以使用创建,也可以通过创建,后者允许传递额外的数据。下面是创建自定义事件的示例代码:// 创建一个自定义事件});// 在目标元素上触发事件// 添加事件监听器来处理自定义事件// 输出:Hello World});在上面的例子中,我们创建了一个包含额外数据的。

weixin_42465140的博客 385

DW —— 简易计算器 (JavaScript)

一、做计算器内部的计算之前就要先把页面的布局设计好 二、每一个放入数据的地方就是一个文本框,那个加减乘除就是一个按钮 也就是body标签对中的代码设置。 <body> <form id="myform" name="myform" method="post"> <table width="271" border="1" cellpadding="1" cellspacing="0"> <tbody> <tr> <

weixin_52626164的博客 3673

Dw 和 HtmI 制作一个简易计算器

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算机</title> <style type="text/css"> table{border:1px solid gray;} td{width: 10px;height: 10px;border:1px groove gray;text-align: right;padding: 5px;margin: 5px;border-radius: 5px 5px 5px 5px;} button{width: 40px;height: 40px;border-radius: 5px 5px 5px 5px;} #result{color:red;font-size: 30px;font-width:bold;background-color: lightgray;} .s2{font-size: 30px;font-weight: bold;

简易计算器源码

计算器  var initData="";  var lastop = "";  var num1 = 0;  var num2 = 0;     function getNum(num){ initData+=num; showData(initData);}  function getOp(op){ lastop = op;//保存最后点击的符号 //保存第一个数

LY2422836708的博客 875

VLA、世界模型与端到端在智驾中的本质关系与工程落地

世界模型并非3D重建,而是对环境状态转移函数的可微分建模;VLA不是视觉+语言+动作的简单拼接,核心在于跨模态语义对齐。二者共同支撑具身智能系统实现从感知到行动的闭环推演,其技术价值体现在长尾场景泛化能力提升与决策延迟降低。在自动驾驶领域,真实量产方案均采用VLA架构作为多模态感知基础,嵌入轻量级世界模型以支持反事实轨迹推演,并通过WA硬件封装保障实时性,最终由端到端控制层完成像素到扭矩的语义贯通。这种混合架构已成L2+/L3智驾系统的工程共识。

weixin_34163553的博客 365

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

简易版网页计算器js代码页面

var initData=""; var lastOp=""; var num1=""; var num2=""; var result = ""; /** 需求:获取数据 思路:    1.获取当前文本框中的内容(var默认字符串型)         2.将用户输入的数据以字符串型连接到当前字符串的后面() */ function getNum(num) {     i

qq_30976301的博客 691

ubuntu安装英伟达显卡驱动后wifi消失解决方法

ubuntu安装英伟达显卡驱动后(比如4090和3090等),会把wifi和蓝牙驱动去除,导致wifi无法连接。需要重新下载驱动安装。

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 3903

Java入门级小案例:网页版简易计算器

用HTML、CSS、JS进行书写一个具备一定功能的简易计算器。 效果显示 若喜欢,请一键三连!

2302_79622705的博客 1099

无人机频谱侦测与智能识别技术实战解析

本文深入解析无人机频谱侦测与智能识别技术实战应用,涵盖无线电侦测、信号处理和定位技术等核心内容。通过频谱分析、特征提取和机器学习算法优化,实现高精度无人机识别与定位,并分享复杂环境下的应对策略和系统集成经验。

weixin_28419039的博客 487

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8109

node.js学习:利用express搭建简易网页计算器

node.js学习:利用express搭建简易网页计算器本文博客链接:http://blog.youkuaiyun.com/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10express安装:1.安装express-generator输入命令:npm install -g express-generator2.安装express输入命令:npm install -g express3.验证是否安

jdh99的专栏 3695

Innovus中_clock_gen skew group的隐藏陷阱:如何避免自动分组导致的时序问题

本文深入剖析了在Innovus工具进行时钟树综合(CTS)时,`_clock_gen` skew group自动分组机制可能引发的隐蔽时序问题。文章通过实际案例,解释了该机制如何错误地将分频寄存器与配置寄存器归为一组,从而破坏时钟域边界并导致post-CTS时序违例,并提供了关闭自动提取、手动精确定义skew group等有效解决方案。

gpu4optimizer的博客 266

GD32F103VBT6串口OTA升级保姆级教程:当硬件没留Boot0引脚时,我是如何用Keil和Ymodem搞定的

本文详细介绍了GD32F103VBT6在无Boot0引脚情况下的串口OTA升级方案,通过Keil工程改造和Ymodem协议实现可靠固件更新。文章涵盖Bootloader配置、APP工程调整、Ymodem传输优化等关键步骤,为嵌入式开发者提供了一套完整的解决方案,特别适用于封闭式设备的远程更新需求。

weixin_28744613的博客 182

Java炫酷烟花③(完整代码)

Java语言实现炫酷烟花动画的完整代码。 下载代码 下载链接:我是一只有趣的兔子,感谢你的喜欢。

AIGC 783

[JavaScript学习记录] 首次运用于网页,做一个简易利息计算器!!!

事件 javascript允许html与用户交互的行为 例如:鼠标点击事件 <script> function sayHello{ alert('Hello World ppp!'); } </script> <button onclick="sayHello()">kick me</button> 错误处理 <script> function f1(){ //函数f1是存在的 } try{ document...

☆迷茫Dog的秘密基地☆ 855

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Web网页实现计算器功能

计算器说明:主要是对样式和一些简单的文本操作进行,计算用到的是js内置的eval()函数,只需要将文本框的字符串作为参数传入即可得到结果,能够进行简单的运算,非常强大!<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>计算器</title> <style type="text/

L的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

js 计算机功能吗,js实现网页计算器

如何在利用HTML,css和js的知识制作一个简单的网页计算器呢?一个计算机中具备了:计算机整体框输入框输入按钮计算机整体框:/*设置div样式*/#showdiv{border: solid 1px;border-radius: 5px;width: 350px;height: 400px;text-align: center;margin: auto;/*设置居中*/margin-top: 5...

weixin_30767945的博客 369

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

html+css+js实现简易网页计算器

【代码】js实现简易网页计算器。

m0_70932336的博客 638
下一篇: 数据结构——第一讲、基本概念
Suzuki Mirai
博客等级 码龄9年 17粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值