Ответ 1
jQuery получает свои значения из движка DOM браузеров, которые всегда возвращают нормализованные значения в пикселях, независимо от того, как они были встроены.
Таким образом, единственный способ, которым вы сможете это сделать, - пересчитать проценты на основе ширины/высоты элементов и ширины и высоты родителей после прекращения изменения размера.
$(".image").resizable({
autoHide: true,
stop: function(e, ui) {
var parent = ui.element.parent();
ui.element.css({
width: ui.element.width()/parent.width()*100+"%",
height: ui.element.height()/parent.height()*100+"%"
});
}
});
См. выше в действии на jsFiddle
Обратите внимание, как я устанавливаю ширину/высоту с помощью .css
вместо .width
и .height
. Это связано с тем, что последний будет нормализован движком DOM и превращен в пиксели.
Теперь к некоторой обратной связи по вашему коду. Это довольно беспорядок, если быть честным. Это очень плохая практика использования встроенных стилей и скриптов. Установите ширину/высоту #parentDiv
с помощью css так же, как вы сделали с .image
. И не используйте атрибут onmouseover
. Вместо этого привяжите событие с помощью jQuery, используя .bind
.
Также вы не должны изменять размер элементов на мыши. Это нужно сделать один раз, когда документ будет готов. Используйте параметр autoHide
, чтобы скрыть обработчики, когда мышь не находится над элементом. Альтернативой является привязка методов enable
и disable
к наведению мыши, но это не будет иметь одинакового результата.