JS에서 계산기를 구현하는 단계에 대한 자세한 설명
이번에는 JS로 계산기를 구현하는 단계에 대해 자세히 설명하겠습니다. JS로 계산기를 구현하기 위한 주의사항은 무엇인가요?
저는 항상 최종 검토 중에 계산기를 작성하고 싶었습니다. 여가 시간에도 계산기를 어떻게 구현해야 할지 고민했지만, 그냥 작성하고 싶었습니다. 어제 드디어 공사에 들어갔습니다. 처음에는 완공까지 일주일에서 최소 이틀은 걸릴 거라 생각했는데 완공 후 집에 갈 수 있을 것 같았습니다. 하지만 어제 설계부터 구현까지 전체 구현 과정이 비교적 순조롭게 진행될 것이라고는 예상하지 못했습니다.
한 달 정도 코드를 많이 작성하지 않았습니다. 제 두뇌 전체가 적응하지 못하고 일부 기본적인 것들이 약간 흐릿합니다. 아마 애초에 잘 이해하지 못했고, 다른 실천도 없었기 때문에 효율성이 다소 떨어지는 결과를 낳았을 수도 있습니다.
Text
html 코드:
<p class="errorHint" id="errorHint"><img src="https://github.com/crystalYY/calculator/blob/master/img/error.png?raw=true"></p> <table cellpadding="0"> <tr> <th colspan="5">计算器</th> </tr> <tr> <td colspan="5"> <input type="text" value="0" name="showResult"> </td> </tr> <tr> <td><button>7</button></td> <td><button>8</button></td> <td><button>9</button></td> <td><button class="setChange" id="backSpace">退格</button></td> <td><button class="setChange" id="clearNum">C</button></td> </tr> <tr> <td><button>4</button></td> <td><button>5</button></td> <td><button>6</button></td> <td><button>+</button></td> <td><button>-</button></td> </tr> <tr> <td><button>1</button></td> <td><button>2</button></td> <td><button>3</button></td> <td><button>*</button></td> <td><button>/</button></td> </tr> <tr> <td><button>0</button></td> <td><button>.</button></td> <td><button>%</button></td> <td colspan="2"><button class="setChange" id="gainResult">Enter</button></td> </tr> </table> <script type="text/javascript" src='index.js'> </script>
CSS코드:
*{margin: 0px; padding: 0px;} .errorHint{position: absolute; left: 130px; top:-282px;} .showError{border:1px solid red;} table{ border: 2px solid #996c33; width: 550px; padding: 10px; margin: 150px auto; background:url(https://github.com/crystalYY/calculator/blob/master/img/bg2.jpg?raw=trueg) left center no-repeat; border-radius: 10px;} table td{ text-align: center; width: 100px; height: 40px; padding-left: 2px; padding-bottom: 2px; } table th{ font-size: 18px; font-family:'楷体'; color: #8B0000; } table td button{ width: 98%; height: 98%; font-size: 16px; font-family: 'Microsoft yahei'; background: none; color: #8B4726; outline:none; border:1px solid #000; border-radius: 5px; cursor: pointer; } table td input{ width: 100%; margin: 10px 0; padding: 5px; border:1px solid #996c33; box-sizing: border-box; text-align: right; font-size: 16px; font-family: 'Microsoft yahei'; }
JS 코드:
var oinput=document.getElementsByTagName('input')[0]; //获取外部样式 function getStyle(obj, name) { if(obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, false)[name]; } } //渐变动画 function move(obj,attr,tar){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var cur=parseInt(getStyle(obj,attr)); var itarget=parseInt(tar); var speed=(itarget-cur)/6; speed=speed>0?Math.ceil(speed):Math.floor(speed); obj.style[attr]=parseInt(getStyle(obj,attr))+speed+'px'; if(speed==0){ clearInterval(obj.timer); } },30); } //事件绑定函数 function addEvent(obj,ev,fun){ if(obj.attachEvent){ obj.attachEvent('on'+ev,fun); }else{ obj.addEventListener(ev,fun,false); } } //阻止默认行为 function stopEvent(ev){ var e=ev||window.event; if(e.preventDefault){ e.preventDefault(); } else{ e.returnValue=false;//ie } } //计算最终结果 function getResult(){ function evalResult(){ var result=eval(oinput.value); return result; } //捕获异常 try{ var x=evalResult(); return x; } catch (e){ oinput.className='showError'; var errorHint=document.getElementById('errorHint'); move(errorHint,'top',0); setTimeout(function(){ oinput.className=''; move(errorHint,'top',-282); },2000); return oinput.value; } } //文本框获取焦点,错误提示消失 //按下回车得到结果 function enterResult(ev){ var e=ev||window.event; if(e.keyCode==13){ stopEvent(ev);//阻止enter键的默认行为 var result=getResult(); oinput.value=result; } } //绑定点击事件 function init(){ var otable=document.getElementsByTagName('table')[0]; addEvent(otable,'keydown',function(ev){ enterResult(ev); }); addEvent(otable,'click',function(ev){ stopEvent(ev); var e=ev||window.event; var itat=e.target||e.srcElement; var obtns=document.getElementsByTagName('button'); if(itat.nodeName.toLowerCase()=='button'){ for(var i=0;i<obtns.length;i++){ obtns[i].style.borderColor='#000'; } itat.style.borderColor='white'; if(itat.className!='setChange'){ if(oinput.value=='0'){ oinput.value=''; oinput.value+=itat.innerHTML; } else{ oinput.value+=itat.innerHTML; } }else{ if(itat.id=='backSpace'){ oinput.value=oinput.value.toString().slice(0,-1); } else if(itat.id=='clearNum'){ oinput.value='0'; }else{ var result=getResult(); oinput.value=result; } } } }); } init();
일반 디스플레이 인터페이스
오류 프롬프트 인터페이스
구현 아이디어
1. 테이블을 사용하여 전체 인터페이스를 그립니다.
나는 다른 사람들이 구현한 구조를 통해 배웠고 그들 중 일부는 td에 직접 1, 2, 3 또는 백스페이스를 쓰지 않았지만 실제로는 아직 실제로 그렇게 하지 않았습니다. 이것이 왜 그런지 이해하지만 조판 중에 어느 정도 영향을 미친다고 생각합니다. 여백은 td에 영향을 미치지 않기 때문에 패딩만 설정할 수 있습니다.
2. eval 함수를 사용하여 최종 결과를 계산하고 예외를 포착합니다.
function getResult(){ function evalResult(){ var result=eval(oinput.value); return result; } //捕获异常 try{ var x=evalResult(); return x; } catch (e){ oinput.className='showError'; var errorHint=document.getElementById('errorHint'); move(errorHint,'top',0); setTimeout(function(){ oinput.className=''; move(errorHint,'top',-282); },2000); return oinput.value; } }
eval 함수는 w3c에서 다음과 같이 정의됩니다.
eval() 함수는 특정 값을 계산할 수 있습니다. 문자열을 입력하고 실행합니다. JavaScript 코드입니다.
이 기능을 사용하면 최종 결과를 쉽게 얻을 수 있습니다. 내 생각은 사용자가 계산할 수식을 입력할 때 개입하지 않는 것입니다. 최종 계산은 입력 입력 상자에서 값을 얻은 다음 해당 값을 eval에 매개 변수로 전달하고 try catch(예외)를 사용하여 예외를 캡처하고 처리합니다. .
3. 이벤트 프록시를 통해 이벤트 바인딩
각 버튼에는 클릭 이벤트가 필요하기 때문에 하나씩 바인딩하면 코드가 매우 간결해지고 효율성이 매우 떨어집니다. 이때 이벤트 버블링의 원리로 인해 클릭 이벤트를 테이블에 바인딩한 다음 이벤트가 발생한 특정 개체를 판단하여 다양한 반응을 보이고 다양한 기능을 호출할 수 있습니다.
4. 기타 효과
자신의 디자인 아이디어에 따라 다른 효과를 추가할 수 있습니다. 주로 오류 메시지 애니메이션을 추가했습니다. 평가 함수 에서 예외 가 발생하면 그림이 위에서 천천히 아래로 미끄러지며, 머무는 시간은 setTimeout을 통해 설정됩니다.
5. 세부 사항에 주의하세요
결과를 얻기 위해 Enter 키 누르기를 설정할 때 keydown 이벤트 개체는 전체 테이블이어야 하며 Enter 키의 기본 동작을 방지해야 합니다.
호환 기능이 필요합니다. obj .style.attr은 인터라인 스타일만 얻을 수 있으므로 요소 스타일을 얻을 때 작성됩니다. 외부 스타일을 얻으려면 getCompulatedStyle(obj,false)[attr] 또는 IE 호환 obj.currentStyle[attr]을 사용해야 합니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료:
React가 반응 라우터 라우팅에서 로그인 확인 제어를 구현하는 방법
위 내용은 JS에서 계산기를 구현하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Windows 운영 체제는 세계에서 가장 인기 있는 운영 체제 중 하나이며, 새로운 버전의 Win11이 많은 주목을 받았습니다. Win11 시스템에서 관리자 권한을 얻는 것은 사용자가 시스템에서 더 많은 작업과 설정을 수행할 수 있도록 하는 중요한 작업입니다. 이번 글에서는 Win11 시스템에서 관리자 권한을 얻는 방법과 권한을 효과적으로 관리하는 방법을 자세히 소개하겠습니다. Win11 시스템에서 관리자 권한은 로컬 관리자와 도메인 관리자의 두 가지 유형으로 나뉩니다. 로컬 관리자는 로컬 컴퓨터에 대한 모든 관리 권한을 갖습니다.

OracleSQL의 나눗셈 연산에 대한 자세한 설명 OracleSQL에서 나눗셈 연산은 두 숫자를 나눈 결과를 계산하는 데 사용되는 일반적이고 중요한 수학 연산입니다. 나누기는 데이터베이스 쿼리에 자주 사용되므로 OracleSQL에서 나누기 작업과 사용법을 이해하는 것은 데이터베이스 개발자에게 필수적인 기술 중 하나입니다. 이 기사에서는 OracleSQL의 나누기 작업 관련 지식을 자세히 설명하고 독자가 참고할 수 있는 특정 코드 예제를 제공합니다. 1. OracleSQL의 Division 연산

PHP의 모듈로 연산자(%)는 두 숫자를 나눈 나머지를 구하는 데 사용됩니다. 이 글에서는 모듈로 연산자의 역할과 사용법을 자세히 논의하고 독자의 이해를 돕기 위해 구체적인 코드 예제를 제공합니다. 1. 모듈로 연산자의 역할 수학에서는 정수를 다른 정수로 나누면 몫과 나머지가 나옵니다. 예를 들어 10을 3으로 나누면 몫은 3이고 나머지는 1입니다. 이 나머지를 얻기 위해 모듈로 연산자가 사용됩니다. 2. 모듈러스 연산자의 사용법 PHP에서는 모듈러스를 나타내기 위해 % 기호를 사용합니다.

효율적인 피보나치 수열 계산기: 피보나치 수열의 PHP 구현은 매우 고전적인 수학 문제입니다. 규칙은 각 숫자가 이전 두 숫자의 합과 동일하다는 것입니다. 즉, F(n)=F(n -1)+F입니다. (n-2), 여기서 F(0)=0이고 F(1)=1입니다. 피보나치 수열을 계산할 때 재귀적으로 구현할 수는 있지만 값이 커질수록 성능 문제가 발생합니다. 따라서 이 기사에서는 PHP를 사용하여 효율적인 피보나치 작성 방법을 소개합니다.

Linux 시스템 호출 system() 함수에 대한 자세한 설명 시스템 호출은 Linux 운영 체제에서 매우 중요한 부분으로 시스템 커널과 상호 작용하는 방법을 제공합니다. 그 중 system() 함수는 흔히 사용되는 시스템 호출 함수 중 하나이다. 이 기사에서는 system() 함수의 사용법을 자세히 소개하고 해당 코드 예제를 제공합니다. 시스템 호출의 기본 개념 시스템 호출은 사용자 프로그램이 운영 체제 커널과 상호 작용하는 방법입니다. 사용자 프로그램은 시스템 호출 기능을 호출하여 운영 체제를 요청합니다.

Linux의 컬 명령에 대한 자세한 설명 요약: 컬은 서버와의 데이터 통신에 사용되는 강력한 명령줄 도구입니다. 이 글에서는 컬 명령어의 기본적인 사용법을 소개하고, 독자들이 명령어를 더 잘 이해하고 적용할 수 있도록 실제 코드 예제를 제공할 것입니다. 1. 컬이란 무엇인가? 컬은 다양한 네트워크 요청을 보내고 받는 데 사용되는 명령줄 도구입니다. HTTP, FTP, TELNET 등과 같은 다중 프로토콜을 지원하며 파일 업로드, 파일 다운로드, 데이터 전송, 프록시와 같은 풍부한 기능을 제공합니다.

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

소프트웨어 개발 분야에서 널리 사용되는 프로그래밍 언어로서 C 언어는 많은 초보 프로그래머가 가장 먼저 선택하는 언어입니다. C 언어를 배우면 프로그래밍에 대한 기본 지식을 쌓을 수 있을 뿐만 아니라 문제 해결 능력과 사고력도 향상될 수 있습니다. 이 기사에서는 초보자가 학습 과정을 더 잘 계획하는 데 도움이 되는 C 언어 학습 로드맵을 자세히 소개합니다. 1. 기본 문법 배우기 C 언어를 배우기 전에 먼저 C 언어의 기본 문법 규칙을 이해해야 합니다. 여기에는 변수 및 데이터 유형, 연산자, 제어문(예: if 문,
