Показать сообщение отдельно
  #4 (permalink)  
Старый 24.07.2011, 16:09
Аватар для SlavaPav
Аспирант
Отправить личное сообщение для SlavaPav Посмотреть профиль Найти все сообщения от SlavaPav
 
Регистрация: 25.02.2010
Сообщений: 57

Можно улучшить и упростить (комментарии для тех кто плохо знает английский):
$('#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();
    }
}

Последний раз редактировалось SlavaPav, 24.07.2011 в 17:30.
Ответить с цитированием