计算器原生js

目录

1.HTML

2.CSS

2.JS

4.资源

5.运行截图

6.下载连接

7.注意事项


1.HTML

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>计算器</title>
    <link rel="stylesheet" href="../css/calculator.css">
    <style>
        .calculator{
            width: 250px;
            height: 430px;
            margin: 100px auto;
            border: 1px #ccc solid;
        }
        h3{
            width: 100%;
            height: 50px;
            border-bottom: 1px #ccc solid;
        }
        h4{
            width: 100%;
            height: 30px;
            border-bottom: 1px #ccc solid;
        }
        .list{
            width: 100%;
            height: 350px;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-around;
            align-content: space-around;
        }
        .list li{
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            border: 1px #ccc solid;
        }
    </style>
</head>
<body>
    <div class="calculator">
        <h3></h3>
        <h4></h4>
        <ul class="list">
            <!-- <li>AC</li>
            <li>%</li>
            <li>←</li>
            <li>÷</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>×</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>-</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>+</li>
            <li>00</li>
            <li>0</li>
            <li>.</li>
            <li>=</li>  -->
        </ul>
    </div>
</body>
</html>
<script src="../js/calculator.js"></script>
<script>
    let list = document.querySelector('.list');
    let h3 = document.querySelector('h3');
    let h4 = document.querySelector('h4');
    let listData = ['AC','%','←','÷',7,8,9,'×',4,5,6,'-',1,2,3,'+','00',0,'.',"="];
    listData.forEach(item => {
        let li = `<li>${item}</li>`;
        list.innerHTML+=li;
    });
    let li = list.querySelectorAll('li');
    list.addEventListener('click',(e)=>{
        let target = e.target;
        // 检查点击的目标是否是 li 元素
        if (target.tagName.toLowerCase() === 'li') {
            h3.innerHTML+=target.innerHTML;
            console.log(h3.innerHTML.slice(-2),'qqq');
            if(h3.innerHTML.slice(-2).match(/^[\+\-\×\÷\%]+$/)){
                console.log(h3.innerHTML);
                h3.innerHTML=h3.innerHTML.substring(0, h3.innerHTML.length - 2) + target.innerHTML;
            };
            if(target.innerHTML=='←'){
                let txt = h3.innerHTML;
                console.log(txt.length);
                h3.innerHTML=txt.substring(0, txt.length - 2);
                console.log(target,h3.innerHTML);
            }
            if(target.innerHTML=='AC'){
                h3.innerHTML='';
                h4.innerHTML='';
            }
            if(target.innerHTML=='='){
                let txt = h3.innerHTML.replace(/\u00F7/g, "/").replace(/\u00D7/g, "*");
                h3.innerHTML=h3.innerHTML.substring(0, txt.length - 1);
                let data = {
                    txt:txt.substring(0, txt.length - 1)
                };
                fetch("http://localhost:8080/api/calculator", {
                    method: "POST",
                    headers: {
                    'Content-Type': 'application/json', // 设置请求头的 Content-Type
                    },
                    body: JSON.stringify(data),
                }).then(response => response.json()).then(res => {
                    h4.innerHTML=res.answer;
                    console.log("res:", res);
                }).catch(err => {
                    console.log("err:", err);
                });
            }

            // 阻止事件冒泡
            e.stopPropagation(); 
        }
    });

</script>

2.CSS

css 复制代码
*{margin: 0;padding: 0;}
ul,li,ol{list-style-type: none;}
button{cursor: pointer;border: none;background: rgba(255, 255, 255, 1);}

2.JS

javascript 复制代码
let list = document.querySelector('.list');
let h3 = document.querySelector('h3');
let h4 = document.querySelector('h4');
let listData = ['AC','%','←','÷',7,8,9,'×',4,5,6,'-',1,2,3,'+','00',0,'.',"="];
listData.forEach(item => {
    let li = `<li>${item}</li>`;
    list.innerHTML+=li;
});
let li = list.querySelectorAll('li');
list.addEventListener('click',(e)=>{
    let target = e.target;
    // 检查点击的目标是否是 li 元素
    if (target.tagName.toLowerCase() === 'li') {
        h3.innerHTML+=target.innerHTML;
        console.log(h3.innerHTML.slice(-2),'qqq');
        if(h3.innerHTML.slice(-2).match(/^[\+\-\×\÷\%]+$/)){
            console.log(h3.innerHTML);
            h3.innerHTML=h3.innerHTML.substring(0, h3.innerHTML.length - 2) + target.innerHTML;
        };
        if(target.innerHTML=='←'){
            let txt = h3.innerHTML;
            console.log(txt.length);
            h3.innerHTML=txt.substring(0, txt.length - 2);
            console.log(target,h3.innerHTML);
        }
        if(target.innerHTML=='AC'){
            h3.innerHTML='';
            h4.innerHTML='';
        }
        if(target.innerHTML=='='){
            let txt = h3.innerHTML.replace(/\u00F7/g, "/").replace(/\u00D7/g, "*");
            h3.innerHTML=h3.innerHTML.substring(0, txt.length - 1);
            let data = {
                txt:txt.substring(0, txt.length - 1)
            };
            fetch("http://localhost:8080/api/calculator", {
                method: "POST",
                headers: {
                'Content-Type': 'application/json', // 设置请求头的 Content-Type
                },
                body: JSON.stringify(data),
            }).then(response => response.json()).then(res => {
                h4.innerHTML=res.answer;
                console.log("res:", res);
            }).catch(err => {
                console.log("err:", err);
            });
        }

        // 阻止事件冒泡
        e.stopPropagation(); 
    }
});

4.资源

5.运行截图

6.下载连接

在此处下载压缩包

【免费】原生js配合Node.js的计算器资源-CSDN文库

7.注意事项

此压缩包 包含前后端简单交互,后端需要用到Node.js,运行口令 nodemon app.js

或者在serve文件夹直接运行run.bat文件,运行成功后打开html即可。注意:run.bat运行成功后不要退出cmd。

相关推荐
qq_589666056 小时前
TypeScript 完整入门教程
前端·javascript·typescript
星栈独行8 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
落落Plus9 小时前
浏览器缓存机制详解
javascript·缓存·浏览器缓存
浅水壁虎11 小时前
vue基础(第二章 )
前端·javascript·vue.js
界面开发小八哥11 小时前
界面控件DevExtreme v26.1新版亮点——支持Angular 22
前端·javascript·angular.js·devexpress·ui开发·devextreme
mONESY12 小时前
React useState 核心原理与最佳实践:从异步更新到性能优化全解
javascript
腻害兔12 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
gis开发之家13 小时前
《Vue3 从入门到大神37篇》Vue3 源码详解(七):watch 与 watchEffect 源码对比——副作用是如何被追踪的?
javascript·前端框架·vue3·vue3源码
bloglin9999915 小时前
langchain 和 langgraph 和 react
javascript·react.js·langchain
触底反弹15 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js