так логика простая.
mousedown - начинаем двигать (left, translateX)
mousemove - следим за координатами ползунка, слева увеличиваем белую линию. если координаты (по X) больше или равны очередному кружку - перекрашиваем его (навешиваем класс).
координаты точек высчитываем сразу при инициализации и обновляем по onresize, если необходимо.