Готовые библиотеки тебе в помощь, но суть вообще проста: надо высчитать видимую область и соотношение ей ко всему прокручиваемому контенту, да перенести это соотношение в кастомник в виде размеров. Так как видимая область это обычно некий блок с фиксированной высотой, у которого включена прокрутка (которую надо скрыть), то внутрянки достаточно обернуть в еще один блок, чтобы получить размер.
И ловя событие скролла получать его значения и менять состояние скроллбара. В обратную сторону это тоже работает уже в режиме записи в прокрутку других значений.