javascript ui module

Custom Element´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.

JavascriptÀÇ Class ŸÀÔÀ» ÀÌ¿ëÇؼ­ new·Î »ý¼º ÇÒ°ÍÀÌ´Ù.
JavascriptÀÇ Class ŸÀÔ°ú ÅÛÇø´ ¹®ÀÚ¿­À» »ç¿ëÇؼ­ UI¸¦ ¸ðµâÈ­ Çغ¸ÀÚ.

1.ÅÛÇø´ ¹®ÀÚ¿­ º¯¼ö¸¦ Çì´õ¿Í Body¿¡ Ãß°¡


ÅÛÇø´ ¹®ÀÚ¿­¿¡ CSS, HTMLÀÇ ³»¿ëÀ» Ãß°¡ÇÑÈÄ °¢°¢ Çì´õ¿Í Body¿¡ Ãß°¡ÇÑ´Ù.

½ºÅ¸ÀÏÀ» Çì´õ¿¡ Ãß°¡

virtualKeyboardStyle ÅÛÇø´ ¹®ÀÚ¿­À» writeStyle ÇÔ¼ö·Î Çì´õ¿¡ Ãß°¡ÇÑ´Ù.

const virtualKeyboardStyle = `
html, body {
  overflow: hidden;
}    

.virtual-keyboard {
    position: absolute;
    display: block;
    left: 0px;
    top: 100%;
    width: 100%;
    height: 100%;
    background-color: rgb(33, 47, 61);
    margin: 0px;
    padding: 0px;
    transition: top 2s ease .5s;
}

.virtual-keyboard-move {
    top: 0px;
}
`;

function writeStyle(styleNameId, cssText) {
    var styleElement = document.getElementById(styleNameId);
    if (styleElement)
        document.getElementsByTagName('head')[0].removeChild(styleElement);
    styleElement = document.createElement('style');
    styleElement.type = 'text/css';
    styleElement.id = styleNameId;
    styleElement.innerHTML = cssText;
    document.getElementsByTagName('head')[0].appendChild(styleElement);
}

writeStyle('virtualKeyboard_Style', virtualKeyboardStyle);

body¿¡ HTML Ãß°¡

const virtualKeyboardHtml = `
<div class="virtual-keyboard" id="Virtual_Keyboard"></div>
`;

function writeBodyHTML(htmlCode) {
   document.body.innerHTML = document.body.innerHTML + htmlCode;
}

writeBodyHTML(virtualKeyboardHtml);

body¿¡ HTMLÀ» Ãß°¡ÇÒ¶§´Â ±âÁ¸ ³»¿ëÀ» À¯ÁöÇϱâ À§ÇØ ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù.

document.body.innerHTML = document.body.innerHTML + htmlCode;

¿¤¸®¸ÕÆ®¿¡ HTML Ãß°¡


ºÎ¸ð HTML

<div id='Test_Id'>aaaaaaaaaaaaaaaaaaaaaaaa</div>

repalce °ªÀÌ trueÀÌ¸é ±âÁ¸ immerHTML ³»¿ë ´ëÄ¡
repalce °ªÀÌ falseÀÌ¸é ±âÁ¸ immerHTML ³»¿ë À¯Áö

const virtualKeyboardHtml = `
<div class="virtual-keyboard" id="Virtual_Keyboard"></div>
`;

function writeHTML(elementName, htmlCode, replace) {
  let element = document.getElementById(elementName);
  if(element) {
      if(replace)
          element.innerHTML = htmlCode;
      else
          element.innerHTML = element.innerHTML + htmlCode;
  };  
}

replace°¡ trueÀ϶§  writeHTML('Test_Id', virtualKeyboardHtml, true);
°á°ú)
<div id="Test_Id">
    <div class="virtual-keyboard" id="Virtual_Keyboard">
    </div>
</div>

replace°¡ falseÀ϶§  writeHTML('Test_Id', virtualKeyboardHtml, false) ;
°á°ú)
<div id="Test_Id">aaaaaaaaaaaaaaaaaaaaaaaa
    <div class="virtual-keyboard" id="Virtual_Keyboard">/div>
</div>

2. Ŭ·¡½º¸¦ ¸¸µéÀÚ

¿ì¸®°¡ ¸¸µé Ŭ·¡½ºÀÇ ±â´ÉÀ» Á¤ÇÏÀÚ.
¿£ÅÍÅ°¸¦ Ä¡¸é È­¸éÀÌ À§·Î ¿Ã¶ó¿Â´Ù. ´Ù½Ã ¿£ÅÍÅ°¸¦ Ä¡¸é È­¸éÀÌ ³»·Á°£´Ù.

Ŭ·¡½ºÀÇ ÇÔ¼ö¸¦ ½ÇÇà ¼ø¼­´ë·Î µû¶ó °¡¸é¼­ ¼³¸íÇÑ´Ù.

»ý¼ºÀÚ ÃʱâÈ­

»ý¼ºÀÚ¿¡¼­ °¢Á¾ ÃʱâÈ­¸¦ ÇÑ´Ù.
this.element  :  ÀÚÁÖ »ç¿ëµÇ´Â ¿ä¼ÒµéÀÇ °ªÀ» ÀúÀåÇϱâ À§ÇÑ ÇÁ·ÎÆÛƼ °´Ã¼ÀÌ´Ù.
this.build( ) ÇÔ¼ö  :  ¼±Çà ½ÇÇàµÇ¾î¾ß ÇÒ°ÍÀ» ½ÇÇàÇÑ´Ù.
this.activate : È°¼ºÈ­ ºñÈ°¼ºÈ­ »óŸ¦ ³ªÅ¸³½´Ù.

class VirtualKeyboard {
    constructor(){
        this.element = {};
        this.build();
        this.activate = false;
    }
}


VirtualKeyboard ¸Þ¼Òµå ¼³¸í

build ÇÔ¼ö:
  • writeStyle ÇÔ¼ö: ½ºÅ¸ÀÏÀ» Çì´õ¿¡ Ãß°¡ÇÑ´Ù.
  • writeBodyHTML ÇÔ¼ö: HTMLÀ» body¿¡ Ãß°¡ÇÑ´Ù.
  • this.element¿¡ ÀÚÁÖ »ç¿ëµÇ´Â ¿ä¼ÒµéÀ» ¹Ì¸® ÀúÀåÇÑ´Ù.
  • transitionend À̺¥Æ®: Æ®·£Áö¼Ç ¾Ö´Ï¸ÞÀ̼ÇÀÌ ³¡³µÀ»¶§ À̺¥Æ®¸¦ µî·ÏÇÑ´Ù.

"transitionend" À̺¥Æ®¸¦ µî·ÏÇÒ¶§ this ¹ÙÀεùÀ» ÇØ¾ß endMoveUpWindow ÇÔ¼ö¿¡¼­ thisÀÇ °ªÀÌ VirtualKeyboardÀÇ ÀνºÅϽº°¡ µÈ´Ù.

el.addEventListener("transitionend", this.endMoveUpWindow.bind(this));

    build() {
        writeStyle('virtualKeyboard_Style', virtualKeyboardStyle);
        writeBodyHTML(virtualKeyboardHtml);      
       
        this.element.virtualKeyboard = document.getElementById("Virtual_Keyboard");
        let el = this.element.virtualKeyboard;
        el.addEventListener("transitionend", this.endMoveUpWindow.bind(this));       
    }

endMoveUpWindow ÇÔ¼ö:
  • "virtual-keyboard-move" Ŭ·¡½º°¡ Ãß°¡ µÇ¾î ¾Ö´Ï¸ÞÀÌ¼Ç ÇÒ¶§ÀÌ´Ù.
  • ¾Ö´Ï¸ÞÀ̼ÇÀÌ ³¡³ª¸é activate Ç÷¡±×¸¦ true·Î ¼³Á¤ÇÑ´Ù.

    endMoveUpWindow() {
        var el = this.element.virtualKeyboard;
        if(el.classList.contains('virtual-keyboard-move')) {
            this.activate = true;
        }
    }

isActivate ÇÔ¼ö:
  • activate Ç÷¡±× °ªÀ» ¹ÝȯÇÑ.

    isActivate() {
        return this.activate;
    }

moveUpWindow ÇÔ¼ö:
  • "virtual-keyboard-move" Ŭ·¡½º°¡ ÀÖÀ¸¸é Æ®·£Áö¼Ç ¾Ö´Ï¸ÞÀ̼ÇÀÌ ½ÃÀ۵ȴÙ.
  • "virtual-keyboard-move" Ŭ·¡½º¸¦ Ãß°¡ÇÑ´Ù.
    moveUpWindow() {
        var el = this.element.virtualKeyboard;
        el.classList.add('virtual-keyboard-move');     
    }   

moveDownWindow ÇÔ¼ö:
  • ¿ä¼Ò°¡ È­¸é ¾Æ·¡·Î ³»·Á °¥¶§ activate °ªÀ» false·Î ¼³Á¤ÇÑ´Ù.
  • "virtual-keyboard-move" Á¦°Å ÇÒ ¶§ ¾Ö´Ï¸ÞÀ̼ÇÀÌ ¿ª ¹æÇâÀ¸·Î ÀÚµ¿À¸·Î ½ÇÇàµÈ´Ù.
  • "virtual-keyboard-move" Ŭ·¡½º¸¦ Á¦°ÅÇÑ´Ù.
    moveDownWindow() {
        this.activate = false;
        var el = this.element.virtualKeyboard;
        el.classList.remove('virtual-keyboard-move');
    }

onKeyDown ÇÔ¼ö:

Å°º¸µå À̺¥Æ®¸¦ ó¸®ÇÏ´Â ÇÔ¼öÀÌ´Ù.
¿£ÅÍÅ°(13)¸¦ ´©¸£¸é moveDownWindow ÇÔ¼ö·Î È­¸éÀ» ½ºÅ©·Ñ ÇÑ´Ù.

    onKeyDown(e) {
        if(e.keyCode === 13) {
            this.moveDownWindow();
            return true;
        }
        return false;
    }

HTML¿¡¼­ script:
  • VirtualKeyboard °´Ã¼¸¦ new·Î »ý¼º ÇÑ´Ù.
  • Å°º¸µå À̺¥Æ®¸¦ VirtualKeyboard Ŭ·¡½ºÀÇ onKeyDown¿¡ Àü´ÞÇÑ´Ù.
  • VirtualKeyboard°¡ ºñÈ°¼ºÈ­ »óÅÂÀ̸é È­¸éÀ» À§·Î ½ºÅ©·Ñ ÇÑ´Ù.

<script>
let virtualKeyboard = new VirtualKeyboard();

document.addEventListener("keydown", onKeyDown);
function onKeyDown(e) {
    if(virtualKeyboard.isActivate()) {
        virtualKeyboard.onKeyDown(e);
        return;
    }
    else if(e.keyCode === 13)
        virtualKeyboard.moveUpWindow();
}
</script>

Å×½ºÆ® ÆÄÀÏ :
vkeyboard_test.html
vkeyboard.js