Hide Scrollbar

½ºÅ©·Ñ¹Ù Á¦¾î¿Í ½ºÅ©·Ñ¹Ù ¼û±â±â¿¡ ´ëÇؼ­ ¾Ë¾Æº»´Ù.

½ºÅ©·Ñ¹Ù Á¦¾î

elememt.scrollIntoView() ¸í·ÉÀ¸·Î ÇØ´ç À§Ä¡·Î À̵¿ ÇÒ¼ö ÀÖ´Ù.
scrollIntoView(true)À̸é topÀ» ±âÁØÀ¸·Î Á¤·ÄÀÌ µÈ´Ù.
scrollIntoView(false)À̸é bottomÀ» ±âÁØÀ¸·Î Á¤·ÄÀÌ µÈ´Ù.

<div id="scrolltest">
    <div id='0'>0</div>    
    <div id='1'>1</div>
    <div id='2'>2</div>
    <div id='3'>3</div>
    <div id='4'>4</div>
    <div id='5'>5</div>
    <div id='6'>6</div>
    <div id='7'>7</div>
    <div id='8'>8</div>
    <div id='9'>9</div>
    <div id='10'>10</div>
    <div id='11'>11</div>
    <div id='12'>12</div>
    <div id='13'>13</div>
    <div id='14'>14</div>
    <div id='15'>15</div>
    <div id='16'>16</div>
    <div id='17'>17</div>
    <div id='18'>18</div>
    <div id='19'>19</div>
</div>

5¹ø ¶óÀÎÀ» º¸°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ¸í·ÉÀ» ÁØ´Ù.

document.getElementById('20').scrollIntoView(true)

´Ù¿î·Îµå ÆäÀÌÁö ¿¹Á¦¿¡¼­ 'w'Å°¸¦ ´©¸£¸é À§·Î ½ºÅ©·Ñ, 's'Å°¸¦ ´©¸£¸é ¾Æ·¡·Î ½ºÅ©·Ñ µÈ´Ù.

<scrollIntoView·Î ½ºÅ©·Ñ Á¦¾î>
var view = getElement(listname);
var itemHeight = getElement(index).offsetHeight; 

if(isUp === false) {
    var scrollEnd = view.scrollTop + view.clientHeight;
    var curPos = (index+1) * itemHeight;
    if(curPos > scrollEnd)
        getElement(index).scrollIntoView(faslse); 
}
else {
    var scrollStart = view.scrollTop;
    var curPos = (index) * itemHeight;
    if(curPos <= scrollStart)
        getElement(index).scrollIntoView(true);             
}       

scrollIntoView( ) ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í scrollTop·Î À̵¿ ÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ ¹Ù²Ü¼ö ÀÖ´Ù.

<scrollTopÀ¸·Î ½ºÅ©·Ñ Á¦¾î>
var scrollList = function(oldIndex, curIndex) {
    var view = getElement(listname);
   
    var itemHeight = getElement(curIndex).offsetHeight;     
   
    var gap = (curIndex+1)*itemHeight - view.scrollTop;
    var move = curIndex - oldIndex;
    if((move > 0 && gap > view.offsetHeight) || (move < 0 && gap - itemHeight < 0))
        view.scrollTop = view.scrollTop+(itemHeight)*move;       
}

¾Æ·¡·Î ½ºÅ©·Ñ ÇÒ¶§ ¾Èº¸À̸é getElement(index).scrollIntoView(faslse) ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
À§·Î ½ºÅ©·Ñ ÇÒ¶§ ¾Èº¸À̸é getElement(index).scrollIntoView(true) ¸í·ÉÀ» »ç¿ëÇÑ´Ù.

º¸ÀÌ´ÂÁö ¾Èº¸ÀÌ´ÂÁö °Ë»çÇϱâ À§ÇØ ºÎ¸ð ¿ä¼ÒÀÇ scrollTop°ú clientHeight°ªÀÌ ÇÊ¿äÇÏ´Ù.
½ºÅ©·ÑÀÌ µÇ¸é ÀÚ½ÄÀÇ À§Ä¡ °ªÀº º¯ÇÏÁö ¾Ê´Â´Ù. ºÎ¸ð ¿ä¼ÒÀÇ scrollTop °ªÀÌ º¯ÇÑ´Ù.
¾ÆÀÌÅÛ ¿ä¼ÒÀÇ ³ôÀÌ´Â offsetHeight·Î Á¤ÇÑ´Ù.

¾Æ·¡·Î ½ºÅ©·Ñ ÇÒ¶§ ÀÚ½Ä À妽ºÀÇ bottom ÁÂÇ¥°¡ view.scrollTop + view.clientHeight °ªÀ» ³Ñ¾î°¡´ÂÁö °Ë»çÇÑ´Ù.
bottom ÁÂÇ¥¶ó curPos = (index+1) * itemHeightÀÌ´Ù.

À§·Î ½ºÅ©·Ñ ÇÒ¶§´Â ÀÚ½Ä À妽ºÀÇ top ÁÂÇ¥°¡ scrollTop ÁÂÇ¥º¸´Ù ÀÛÀºÁö °Ë»çÇÑ´Ù.

offsetHeight, clientHeight¿¡ ´ëÇÑ ¾Æ·¡ À̹ÌÁö¸¦ Âü°í ÇÑ´Ù.


À̹ÌÁö Ãâó
https://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively


½ºÅ©·Ñ¹Ù ¾ø¾Ö±â





¹æ¹ý1) width°ªÀ» 110%·Î ÁöÁ¤ÇÏ¿© ½ºÅ©·Ñ¹Ù ¼û±â±â


#maincontainer { overflow: hidden }
#childcontainer { width: 110%; overflow: auto; }

#maincontainer : overflow°ªÀ» "hidden"À¸·Î ÁöÁ¤ÇÏ¸é ºÎ¸ð ¿µ¿ªÀ» ¹þ¾î³ª´Â ºÎºÐÀº ¼û±ä´Ù.

#childcontainer:  overflow°ªÀ» "auto"·Î ÁöÁ¤ÇÏ¸é ºÎ¸ð ¿µ¿ªÀ» ¹þ¾î³ª´Â ÀÚ½ÄÀº ¼û±ä´Ù.
                        ³»¿ëÀÌ Â÷¸é ½ºÅ©·Ñ¹Ù°¡ »ý±ä´Ù.

¿©±â¼­   width°ªÀÌ 110%°¡ µÇ¸é ºÎ¸ðÀÇ width º¸´Ù Å©Áö±â ¶§¹®¿¡ ½ºÅ©·Ñ¹Ù°¡ hide µÈ´Ù.


//style ºÎºÐ

#maincontainer {
    position: absolute;
    display: block;
    background: orange;
    width:200px;
    height:200px;
    overflow:hidden;
}

#childcontainer {
    position: absolute;
    display: block;
    background: yellow;
    width: 110%;
    height:200px;
    overflow:auto;
}

.selectElement {
    background-color: pink;
}

//body ºÎºÐ

<div id="maincontainer">
    <div id="childcontainer">
        <div id='0'>0</div>   
        <div id='1'>1</div>
        <div id='2'>2</div>
        <div id='3'>3</div>
        <div id='4'>4</div>
        <div id='5'>5</div>
        <div id='6'>6</div>
        <div id='7'>7</div>
        <div id='8'>8</div>
        <div id='9'>9</div>
        <div id='10'>10</div>
        <div id='11'>11</div>
        <div id='12'>12</div>
        <div id='13'>13</div>
        <div id='14'>14</div>
        <div id='15'>15</div>
        <div id='16'>16</div>
        <div id='17'>17</div>
        <div id='18'>18</div>
        <div id='19'>19</div>
    </div>
</div>
                  

¹æ¹ý2) webkit-scrollbar·Î ½ºÅ©·Ñ¹Ù ¼û±â±â

"::-webkit-scrollbar" ¿É¼ÇÀ» »ç¿ëÇØ ½ºÅ©·Ñ¹Ù¸¦ ¼û±æ¼ö ÀÖ´Ù.
ÀÌ ¿É¼ÇÀº Å©·Ò¿¡¸¸ ȣȯ¼ºÀÌ ÀÖ´Ù. ºÎ¸ð°¡ ÇÊ¿ä¾ø¾î¼­ HTMLÀÌ °£´ÜÇØÁø´Ù.

::-webkit-scrollbar {
    display: none;
}

//style ºÎºÐ

::-webkit-scrollbar {
    display: none;
}

#childcontainer {
    position: absolute;
    display: block;
    background: yellow;
    width: 110%;
    height:200px;
    overflow:auto;
}

#scrolltest {
    position: absolute;
    display: block;
    background: yellow;
    width: 200px;
    height:200px;
    overflow:auto;
}

.selectElement {
    background-color: pink;
}

//body ºÎºÐ

<div id="scrolltest">
    <div id='0'>0</div>   
    <div id='1'>1</div>
    <div id='2'>2</div>
    <div id='3'>3</div>
    <div id='4'>4</div>
    <div id='5'>5</div>
    <div id='6'>6</div>
    <div id='7'>7</div>
    <div id='8'>8</div>
    <div id='9'>9</div>
    <div id='10'>10</div>
    <div id='11'>11</div>
    <div id='12'>12</div>
    <div id='13'>13</div>
    <div id='14'>14</div>
    <div id='15'>15</div>
    <div id='16'>16</div>
    <div id='17'>17</div>
    <div id='18'>18</div>
    <div id='19'>19</div>
</div>

Focus ¾øÀÌ ½ºÅ©·Ñ Çϱâ

'w' Å°¸¦ ´©¸£¸é À§·Î ½ºÅ©·Ñ, 's' Å°¸¦ ´©¸£¸é ¾Æ·¡·Î ½ºÅ©·Ñ ÇÑ´Ù.

    var onKeyDown = function(e) {     

        var view = document.getElementById(listname);
        var scrollHeight = view.scrollHeight;
        var height = view.clientHeight;  
        var pos = view.scrollTop;
   
        if(e.keyCode === 'W'.charCodeAt(0)) {
            pos -= scrollStride;           
            if(pos < 0)
                pos = 0;
        }
        else if(e.keyCode === 'S'.charCodeAt(0)) {
            pos += scrollStride;          
            if(pos > (scrollHeight - height))
                pos = scrollHeight - height;
        }
       
        view.scroll(0, pos);
    }

¹®ÀÚ¿­ ½ºÅ©·Ñ Çϱâ

Focus ¾øÀÌ ½ºÅ©·Ñ Çϱ⸦ ¼öÁ¤ÇÑ´Ù.
¿©·¯ ¶óÀÎÀÇ div ÅÂ±× ´ë½Å ¸ÖƼ ¶óÀÎ ¹®ÀÚ¿­À» Ãß°¡ ÇÒ°ÍÀÌ´Ù.
¹®ÀÚ¿­ÀÇ °³Çà ¹®ÀÚ¸¦ <br> ű׷Πº¯È¯ÇØ¾ß ¹®ÀÚ¿­ÀÌ ÁٹٲÞÀÌ µÈ´Ù.

¾Ö±¹°¡ ¹®ÀÚ¿­À» ½ºÅ©·Ñ ÇÑ´Ù.
string replace ÇÔ¼öÀÇ Á¤±Ô½ÄÀ» ÀÌ¿ëÇØ  <br> ű׷Πº¯È¯ÇÏ°í ÀÖ´Ù.

        let str =       
`1.   
µ¿Çع°°ú ¹éµÎ»êÀÌ ¸¶¸£°í ´âµµ·Ï
ÇÏ´À´ÔÀÌ º¸¿ìÇÏ»ç ¿ì¸®³ª¶ó ¸¸¼¼.
¹«±ÃÈ­ »ïõ¸® È­·Á°­»ê
´ëÇÑ »ç¶÷, ´ëÇÑÀ¸·Î ±æÀÌ º¸ÀüÇϼ¼.   

2.
³²»ê À§¿¡ Àú ¼Ò³ª¹«, ö°©À» µÎ¸¥ µí
¹Ù¶÷¼­¸® ºÒº¯ÇÔÀº ¿ì¸® ±â»óÀϼ¼.
¹«±ÃÈ­ »ïõ¸® È­·Á°­»ê
´ëÇÑ »ç¶÷, ´ëÇÑÀ¸·Î ±æÀÌ º¸ÀüÇϼ¼.

3.
°¡À» ÇÏ´Ã °øÈ°Çѵ¥ ³ô°í ±¸¸§ ¾øÀÌ
¹àÀº ´ÞÀº ¿ì¸® °¡½¿ ÀÏÆí´Ü½ÉÀϼ¼.
¹«±ÃÈ­ »ïõ¸® È­·Á°­»ê
´ëÇÑ »ç¶÷, ´ëÇÑÀ¸·Î ±æÀÌ º¸ÀüÇϼ¼.

4.
ÀÌ ±â»ó°ú ÀÌ ¸¾À¸·Î Ã漺À» ´ÙÇÏ¿©
±«·Î¿ì³ª Áñ°Å¿ì³ª ³ª¶ó »ç¶ûÇϼ¼.
¹«±ÃÈ­ »ïõ¸® È­·Á°­»ê
´ëÇÑ »ç¶÷, ´ëÇÑÀ¸·Î ±æÀÌ º¸ÀüÇϼ¼.
`;     
        str = str.replace(/(?:\r\n|\r|\n)/g, '<br>');
        document.getElementById('text_id').innerHTML = str;
    }

´Ù¿î·Îµå:
(focuse Æ÷ÇÔ ½ºÅ©·Ñ) width°ªÀ» 110%·Î ÁöÁ¤ÇÏ¿© ½ºÅ©·Ñ¹Ù ¼û±â±â : scrollbar_test1.html
(focus Æ÷ÇÔ ½ºÅ©·Ñ) webkit-scrollbar·Î ½ºÅ©·Ñ¹Ù ¼û±â±â : scrollbar_test2.html
(focus Æ÷ÇÔ ½ºÅ©·Ñ) scrollTopÀ¸·Î ½ºÅ©·Ñ Çϱâ : scrollbar_test3.html
focus ¾øÀÌ ½ºÅ©·Ñ Çϱâ : scrollbar_test22.html
¹®ÀÚ¿­ ½ºÅ©·Ñ Çϱâ : scrollbar_string.html

ÂüÁ¶)
https://stackoverflow.com/questions/16670931/hide-scroll-bar-but-while-still-being-able-to-scroll
https://www.zerocho.com/category/JavaScript/post/5aa23cd4e70ee8001bc60b9a