본문 바로가기
카테고리 없음

getComputedStyle과 parseFloat, parseInt의 조합

by klm hyeon woo 2024. 6. 26.

목차

· 기존 방식의 문제점

· 효율적이고 더 나은 방식


잠깐 정리를 먼저 해보겠습니다 🫨

· getComputedStyle로 도출된 크기 값을 split을 통해 가공하지마세요

기존 방식의 문제점

getComputedStyle에서 출력되는 값들의 경우 px 단위를 붙여 나오거나, pt 단위 등 다양한 단위들과 함께 출력되는 것을 확인할 수 있습니다. 문자열 형태로 제공되기 때문에 split을 통해 단위에 대한 분기 처리로 가공을 한다면, 매우 비효율적인 로직을 제공할 수 있기 때문에 평소 split 형태로 임시 방편의 로직을 작성했던 부분에 있어 해답을 얻고자 포스팅을 진행하였습니다. 평소 비효율적이라고 생각되었던 코드는 아래와 같습니다.

const element = document.body.querySelector("찾고자 하는 노드 프로퍼티");
/** 아래 로직의 문제점은 getComputedStyle에서 도출된 height 값에 px이 아닌 경우 유연하게 대처를 하지 못하다는 점입니다. */
const height = getComputedStyle(element).height.split("px")[0];

getComputedStyle을 통해 해당 DOM 엘리먼트에 접근을 해서 높이 값 또는 너비 값을 가져올 경우 해당 크기의 단위까지 가져오는 특징이 있는데, 이떄 단위를 제거하기 위해 split을 사용하여 제거를 하게 된다면 현재 상태로서는 제거가 정상적으로 되겠지만 추후 다른 값이 올 경우에는 비정상적인 로직으로서 작동이 됩니다.

효율적이고 더 나은 방식

이를 위해 parseInt · parseFloat과 같은 메소드를 이용하면 문자형 임에도 불구하고, 동적 단위에도 유연하게 대처를 할 수 있습니다. 예를 들어 getComputedStyle로 도출된 값이 "71.056px" 일 경우에 parseInt를 통해 바로 변경이 가능하다는 말입니다. 그리고 뒤에 따라오는 px에 대한 부분도 자연스럽게 없애줄 수 있습니다. parseInt에는 옵셔널한 값이 붙습니다. 이를 radix라고 명칭하며 radix 값에 따라 진수 별 출력되는 값이 다르다고 생각하면 됩니다. 그렇다면 소숫점으로 getComputedStyle의 값이 도출되었을 경우에는 어떻게 소숫점으로 바로 변경할 수 있을까요?

 

parseFloat 메소드라는게 존재합니다. parseFloat 메소드는 radix 값을 옵셔널하게 지원하지 않지만, parseFloat을 통해 getComputedStyle로 도출되는 값을 바로 단위가 제거된 상태의 소숫점 형태로 변경하여 확인할 수 있습니다. 이에 따른 값을 통해 Math.round로 소숫점을 반올림 하는 등 다양한 사례로 사용이 가능합니다. 이를 활용하여 위의 비정상적인 로직을 아래와 같이 수정할 수 있습니다.

const element = document.body.querySelector("찾고자 하는 노드 프로퍼티");

/** 정수 형태로 값을 얻고자 한다면 아래의 코드를 참고할 수 있습니다. */
const height = parseInt(getComputedStyle(element).height, 10);
/** 소숫점 형태로 값을 얻고자 한다면 아래의 코드를 참고할 수 있습니다. */
const height = parseFloat(getComputedStyle(element).height);

레퍼런스

 

Window.getComputedStyle() - Web API | MDN

Window.getComputedStyle() 메소드는 인자로 전달받은 요소의 모든 CSS 속성값을 담은 객체를 회신합니다. 이 속성값들은, 해당 요소에 대하여 활성 스타일시트와 속성값에 대한 기본 연산이 모두 반영

developer.mozilla.org

 

 

 

 

댓글