Вот такую муру надумал,

Код:
k=0; //нажата кнопка или нет
R=227.5; //радиус окружности по дуге которой идет движение бегунка
UP_LIMIT = -73; //верхняя граница
DOWN_LIMIT = 150; //нижняя граница
x_off = -176; //смещение центра окружности относительно центра координат
y_off = 19.5; //
PATH = scrollbar_but1_mc;
Y_START = -72.9; //начальное положение бегунка
//init
PATH._y = Y_START;
PATH._x = R*Math.sin(Math.acos((Y_START - y_off)/R)) + x_off;
//Listeners
scrollbar_but1_mc.onPress = function()
{ k=1;
if((PATH._y < DOWN_LIMIT)&&(PATH._y > UP_LIMIT)){this.startDrag();};
}
scrollbar_but1_mc.onRelease = function()
{k=0;
this.stopDrag();
}
scrollbar_but1_mc.onReleaseOutside = function()
{k=0;
this.stopDrag();
}
scrollbar_but1_mc.onMouseMove = function () {if (k==1){
if((PATH._y < DOWN_LIMIT)&&(PATH._y > UP_LIMIT))
{PATH._x = R*Math.sin(Math.acos((PATH._y - y_off)/R)) + x_off;
my_txt.scroll = Math.abs(UP_LIMIT - MATH._y)*my_txt.maxscroll/Math.abs(UP_LIMIT - DOWN_LIMIT)+1;}
else
if(PATH._y > DOWN_LIMIT){PATH._y = DOWN_LIMIT-0.1;PATH._x = R*Math.sin(Math.acos((PATH._y - y_off)/R)) + x_off;}
else
if(PATH._y < UP_LIMIT){PATH._y = UP_LIMIT+0.1;PATH._x = R*Math.sin(Math.acos((PATH._y - y_off)/R)) + x_off;}
updateAfterEvent();
}
}
но что-то явно не то, вроде все работает(особенно когда текстового поля нет или почти пустое

), но когда текст большой и например с отбрасыванием тени, то при резких движениях нажатой мыши по оси X бегунок буквально срывается с пути, при отпускании возвращается, может поделитесь лучшими идеями, или хотя бы может тут что-то можно сделать.