Никогда не делал, чтоб пример показать, но алгоритм примерно такой, рисуешь полосу прокрутки, рисуешь ползунок в ней (где хочешь и как хочешь), через js получаешь высоту сблока - будет связано с твоим полосой прокрутки, получаешь высоту видимой части - связываешь с ползунком высчитывая его размер по соотношению: размер полосы / ползунок = размер блока общий / видимы блок, дальше вешаешь событие скролла на блок, в коллбэке высчитываешь оффсет и задаешь в таком же соотношении ползунку + обратная связть, вешаешь на ползунок событие mousedown и следишь пока не случиться mouseup за движением курсора по оси Х, попутно проматывая скролл у блока, профит