강의를 보고 난 후 혼자 정리하는 느낌이라.. 조금 조잡하고 설명이 정확하지 않을 수 있습니다
HTML,CSS는 강의자료로 받았고, 기능만 구현했습니다.
완성본
기능 설명
- 몸무게와 신장을 입력하면 계산을 통해서 bmi 수치를 알려줌
- meter 라는 태그를 활용해, 프로그래스바 를 구현함
- 초기화 버튼을 클릭 시 리셋이 되는 기능 구현
HTML 과 CSS
강의 자료이기때문에, 참고용으로 보시라고 캡쳐본으로 올립니다
기능 구현하기
submit 을 했을 때, 기능이 돌아가는 구조입니다.
submit 할 때 기본 브라우저 기능 막기
const onSubmit = (event) => {
event.preventDefault()
}
Input 에 작성한 값 변수에 저장하기
const onSubmit = (event) => {
event.preventDefault()
const w = parseFloat(event.target[0].value)
const h = parseFloat(event.target[1].value)
}
w : weight (몸무게)
h : height (신장)
parseFloat()
- 문자열을 실수로 바꾸는 함수
- 수가 아닌 문자로 시작하면 NaN을 반환
- 공백으로 시작하면 공백을 무시함
- 띄어쓰기로 여러 개의 수가 있으면 첫 번째 수만 바꿈
몸무게와 신장이 숫자가 아니거나, 입력한 값이 0 이하일 경우
const onSubmit = (event) => {
event.preventDefault()
const w = parseFloat(event.target[0].value)
const h = parseFloat(event.target[1].value)
if(isNaN(w) || isNaN(h) || w <= 0 || h <= 0){
alert("적절한 값이 아닙니다")
return;
}// 숫자가 둘 중에 하나라도 아닐 경우 + 입력한 값이 0 이하일 경우
}
1. isNaN()을 사용해, 몸무게와 신장을 입력한 값이 숫자형이 아닐 경우
2. 몸무게와 신장이 0보다 낮은 값을 입력했을 경우
=> alert 메소드를 활용해, 적절한 값이 아니라고 알림이 나오게함.
bmi 값 계산하기
const onSubmit = (event) => {
event.preventDefault()
const w = parseFloat(event.target[0].value)
const h = parseFloat(event.target[1].value)
if(isNaN(w) || isNaN(h) || w <= 0 || h <= 0){
alert("적절한 값이 아닙니다")
return;
}
const bmi = w / (h*h) // bmi 값 계산
}
bmi 수치를 계산하는 방법은 자신의 몸무게(kg)를 키의 제곱(m)으로 나눈 값입니다.
bmi 값 계산이 완료되면, bmi 결과를 UI에 보여주기
const onSubmit = (event) => {
event.preventDefault()
const w = parseFloat(event.target[0].value)
const h = parseFloat(event.target[1].value)
if(isNaN(w) || isNaN(h) || w <= 0 || h <= 0){
alert("적절한 값이 아닙니다")
return;
}// 숫자가 둘 중에 하나라도 아닐 경우 + 입력한 값이 0 이하일 경우
const bmi = w / (h*h)
const res = document.getElementById("res")
res.style.display = "flex"
document.getElementById("bmi").innerText = bmi.toFixed(2)
document.getElementById("meter").value = bmi
}
1. 원래는 display = "none" 이였다가, flex 로 바꿔주면서, ui 에 보여주도록 함.
2. bmi 수치를 toFixed()를 사용해줘서 소수점 2자리까지만 보여주도록 한다.
3. meter 태그의 value 를 bmi 수치로 줘서, 프로그래스바가 활성화되도록 한다.
bmi 계산한 결과값에 따라서 상태와 텍스트 컬러 변경하기
const onSubmit = (event) => {
event.preventDefault()
const w = parseFloat(event.target[0].value)
const h = parseFloat(event.target[1].value)
if(isNaN(w) || isNaN(h) || w <= 0 || h <= 0){
alert("적절한 값이 아닙니다")
return;
}// 숫자가 둘 중에 하나라도 아닐 경우 + 입력한 값이 0 이하일 경우
const bmi = w / (h*h)
const res = document.getElementById("res")
res.style.display = "flex"
document.getElementById("bmi").innerText = bmi.toFixed(2)
document.getElementById("meter").value = bmi
let state = "정상"
let common = true
if(bmi < 18.5){
state = "저체중"
common = false;
}
if(bmi >= 25){
state = "과체중"
common = false;
}
const stateEl = document.getElementById("state")
stateEl.innerText = state
stateEl.style.color = common ? "#29ff21" : "#ff3a3a"
}
1. state = "정상" 으로 기본 값 주기 (state 는 상태를 보여주기 위한 용도)
2. common = true 으로 기본 값 주기 (common은 정상인지, 비정상인지 체크용도)
3. 조건문을 활용해 저체중일 때와 과체중일 때를 나뉘어서 state 와 common 값을 변경해주도록 함.
4. state 값을 결과에 따라서 UI에 보여줌
5. state가 비정상일 경우에는 빨간색 폰트 컬러, 정상일 경우에는 그린 컬러를 주도록 함.
전체 기능 구현 코드
'Javascript > 응용프로젝트' 카테고리의 다른 글
[1] 자바스크립트로 투두리스트(todo-list) 만들기 (0) | 2023.01.06 |
---|---|
자바스크립트로 그림판 만들기 (+ 다운로드 기능) (0) | 2023.01.05 |
자바스크립트로 Date-Picker 구현하기 (0) | 2023.01.03 |
Auto play, Indicator 슬라이더 구현하기 (0) | 2022.12.31 |
[뉴스 타임즈] API 에러 발생시 UI 보여주기 (0) | 2022.10.24 |