If you hook up on the elements scroll
event, you could do something like this, where you set the inner
to width: 100%
and a padding-right: 20px
. (the padding right value need to be bigger than the scrollbar is wide)
That will push the scrollbar out of view, and on scroll you remove the padding, init a timer which will reset the padding if one stop scrolling
(function(timer) {
window.addEventListener('load', function() {
var el = document.querySelector('.inner');
el.addEventListener('scroll', function(e) {
(function(el){
el.style.padding = '0';
clearTimeout(timer);
timer = setTimeout(function() {
el.style.paddingRight = '20px';
}, 100);
})(el);
})
})
})();
.outer {
height: 180px;
width: 500px;
border: 1px solid green;
overflow: hidden;
}
.inner {
width: 100%;
height: 99%;
overflow: auto;
padding-right: 20px;
}
<div class="outer">
<div class="inner">
Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some
content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some
content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>
</div>
</div>
Updated, toggling a class, using Element.classList
, instead of an inline style, which might be a more recommended way.
(function(timer) {
window.addEventListener('load', function() {
var el = document.querySelector('.inner');
el.addEventListener('scroll', function(e) {
(function(el){
el.classList.add('scroll');
clearTimeout(timer);
timer = setTimeout(function() {
el.classList.remove('scroll');
}, 100);
})(el);
})
})
})();
.outer {
height: 180px;
width: 500px;
border: 1px solid green;
overflow: hidden;
}
.inner {
width: 100%;
height: 99%;
overflow: auto;
padding-right: 20px;
}
.inner.scroll {
padding-right: 0;
}
<div class="outer">
<div class="inner">
Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some
content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some
content<br>Some content<br> Some content<br>Some content<br>Some content<br> Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>Some content<br>
</div>
</div>