2015-09-05 3 views
0

Я вхожу в процесс создания оконного менеджера для проекта, над которым я работаю, этот диспетчер окон использует jQuery UI Draggable и Resizable, и по большей части я работаю.jQuery UI Draggable Snap Restore не работает

Проблема, с которой я сталкиваюсь, связана с функцией, которую мне нужно реализовать, ведь окно окна 7/8 привязывается к вершине, слева или справа. теперь у меня есть привязка, но тогда, когда использование перетаскивает окно, я хочу, чтобы он восстановил его старый размер, но нужно было сосредоточиться на точке мыши, и по какой-то причине пользовательский интерфейс jQuery, похоже, восстанавливает позицию до начала перетаскивания когда я изменил его размер.

DEMO http://jsfiddle.net/t5zqcdtm/1/

как проверить это, если вы берете один из 2-х открытых окон и перетаскивать их, так что мышь находится в пределах 3px вершины вы увидите контур полного размера затем отпустить и окно будет полноразмерным, но затем переместите указатель мыши вправо слева от кнопок управления справа от строки заголовка, так что слева от «_» и перетащите окно, которое вы увидите, что положение окна не центрировано мышью.

Код с проблемой находится на линии 108:

var mode = $(ui.helper).data("mode"); 
var oldStyle = JSON.parse($(ui.helper).data("origin")); 
newStyle = clone(oldStyle); 
newStyle.left = e.pageX - (
parseInt(oldStyle.width.substring(0, oldStyle.width.length - 2))/2) + "px"; 
newStyle.top = e.clientY + "px"; 
console.log({ 
    old: oldStyle, 
    new: newStyle 
}); 
$(ui.helper).css(newStyle); 
$(ui.helper).data("mode", ""); 

Может ли один скажите мне, почему окно затем перейти к левой верхней части

ответ

1

draggable Когда начинается там расчет делается с тем, где click был сделан и position и width элемента тащат. Проблема здесь в том, что позиция click вычисляется до вас resize элемента, поэтому затем вычисляется drag с этим click.

Вы можете получить доступ к этому положению click в instance и изменить его в соответствии с вашими потребностями. Например, вы можете определить, находится ли click вне новой ширины окна и, если это так, измените положение. Как это:

start: function (e, ui) { 
        ... 
    //At the end of your start function 
    //you check the actual position of the click 
    var clickLeft = $(this).draggable('instance').offset.click.left; 
    //If this click is out of the window, or in the top right icons 
    if (clickLeft > ($(ui.helper).width() - 50)) { 
     //You set the click left to wherever you need 
     $(this).draggable('instance').offset.click.left = $(ui.helper).width() - 50; 
    } 

} 

http://jsfiddle.net/u95ba45k/1/

+0

Спасибо за это я приступлю к реализации его теперь :) так же, как быстро мысль в моей JS скрипке будет знать о лучшем способе справиться с Z-индексом на окнах? в строке 159 ... Я не поклонник 2 для циклов :( –

+1

Вы можете работать с массивом и отслеживать порядок щелчка и иметь функцию, применяющую zindex в соответствии с положением в массиве. Может быть, немного проще чем у вас сейчас, но в любом случае это будет немного сложно. См. здесь: http://jsfiddle.net/u95ba45k/3/ –

 Смежные вопросы

  • Нет связанных вопросов^_^