В общем-то нужно поместить скроллящийся контейнер в несролящийся, а дальше сделать так:
.parent {
overflow: hidden;
}
.child {
margin-right: -20px;
padding-right: 20px;
}
Ширина самого широкого скролла - 17px на современных системах (Windows 10 Chrome/FF)? 20px должно хватать и на старые. Что делает код: Расширяет контейнер со скроллом на 20px, а контенту в нем дает отступ. С помощью сокрытия переполнения родителя достигается эффект отсутствия скроллбара.
Для плавности можете посмотреть в сторону
$().animate()
(
ссыль) или в сторону шорткатов
$().hide(200), $().show(200), $().fadeIn(200), $().fadeOut(200)
, где 200 - длительность анимации в миллисекундах.