Можно улучшить и упростить (комментарии для тех кто плохо знает английский):
$('#charge, #volume').live('mousedown', function(event){
var $element = $(this).find('div:last'),
element = new Draggable($element);
$element.disableSelection();
element.drag(cursorPosition(event));
$(document).bind('mousemove', function(event){
element.drag(cursorPosition(event));
});
$(document).one('mouseup', function(){
$element.enableSelection();
$(this).unbind('mousemove');
});
// function позицияКурсора(событие) {...
function cursorPosition(event) {
return event.pageX - $element.width()/2;
}
});
// function Перетаскиваемый($элемент) {...
function Draggable($element) {
// function перетащить(позиция) {...
this.drag = function(position) {
var margin = 0;
if (parentLeftEdge() < position) {
if (position < parentRightEdge()) {
margin = position - parentLeftEdge();
} else {
margin = parentRightEdge() - parentLeftEdge();
}
}
$element.css('margin-left', margin+'px');
};
// function леваяГраницаРодителя() {...
function parentLeftEdge() {
return $element.parent().offset().left;
}
// function праваяГраницаРодителя() {...
function parentRightEdge() {
return parentLeftEdge() + $element.parent().width() - $element.width();
}
}