레이블이 DOM인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DOM인 게시물을 표시합니다. 모든 게시물 표시

9.08.2020

자바스크립트에서 입력되는 한글값 구하기(How to get current user input charactor when you can't use onKey event)



자바스크립트에서 입력되는 한글값 구하기

심플한 마크다운 에디터, 공글 을 만들면서 자바스크립트와 DOM에 대해서 많이 배웠다. 그 과정에서 애를 먹은 기능 중 하나가 바로 한글의 keyCode 인식 불가능 문제이었다. 텍스트 에디터를 만들기 위해서는, 그리고 한국 사람들도 사용하기 위해서는 한글 입력은 필수이었다.

여러가지 경우의 수를 console.log로 찍어 보면서 몇 가지를 알게 되었다.

  • 키보드가 한글 입력일 때는 특수키(Shift, Control 등)를 제외하고는 onKeyUp 이벤트가 발생하지 않는다.

  • 따라서 당연히 keyCode를 사용할 수도 없다.

  • 여러가지 이벤트를 실험해본 결과 onInput 이벤트는 잘 작동했다. 이를 적절히 활용하면 가능할 것 같았다.

실시간으로 입력되는 텍스트가 필요한 상황이었다. 그래서 range와 onInput 이벤트를 사용해서 만들어 보았다. 아래는 input 이벤트가 일어나면 현재 커서(caret)를 기준으로 바로 앞칸의 텍스트를 리턴하는 코드이다.

const printCurrentInput = (event) => {
  const currentElement = window.getSelection().focusNode;
  const typedChar = currentElement.textContent.slice(
    window.getSelection().anchorOffset - 1,
    window.getSelection().anchorOffset
  );
  return typedChar;
}

이 코드의 한계로는 각각의 자음과 모음만을 필요로 하는, 즉 정말 어떤 글자키를 눌렀는지 알고 싶을 때는 사용하기 힘들다는 점이다. 다만 지금의 나와 같이 띄어쓰기(space)를 감지하고 싶을 경우 유용할 수 있다. 또한 특정 글자(예를 들면 "럼"과 같은)가 입력되었을 때 이벤트가 일어나야 한다면 유용할 것이다.

어쩐지 React 보다 바닐라 자바스크립트가 훨씬 더 강력하다는 생각이 드는 요즘이다.

Share:

8.30.2020

Today Swimming Learnd - 2020.08.30 : 바닐라 자바스크립트로 돌아가기

 React를 하면서 나의 기본기가 많이 부족하다는 것을 느꼈다. 그래서 시작한 것이 바닐라 자바스크립트로 코드 조각 만들기 프로젝트이다. repl.it에 따로 code-sample이라는 폴더를 만들어두고 기본적인 컨셉들을 하나씩 구현하는 중이다.


바닐라 자바스크립트로 카드 슬라이더와 파도, 물방울 애니메이션을 만든 다음, 똑같은 기능을 React 싱글 페이지로 만들어 보았다. 똑같은 것을 바닐라 자바스크립트와 React로 만들어 본 결과 느낀 점은 "바닐라 자바스크립트가 더 편한데?"이었다. 복잡하지 않은 것들이어서 그랬는지도 모른다. 개인적으로 위 세가지 기능을 React로 만들 때는 state를 만들고 DOM을 직접 건드리지 않으면서 애니메이션 조절하는데 많은 시간을 투자했다.

Share:

6.09.2020

[웹 기초] 브라우저가 내 코드를 해석해서 표시하는 과정

오늘은 웹 기초 공부의 첫 번째로 브라우저가 코드를 해석해서 화면에 표시하는 과정을 공부해서 정리해보려고 한다. 이 글은 네이버 D2에서 번역한 이스라엘 개발자 탈리 가르시엘(Tali Garsiel)의 글을 내가 이해한 대로 재구성하고 설명하는 것이다. 아래에 원문링크, 네이버 번역 링크를 남긴다.

Share: