UI resizable — плагин, который изменяет размеры
Дата публикации: 14.06.2010
Плагин дает возможность изменять размеры любого элемента. Можно захватить любую из границ элемента или за ранее опреденный угол, и изменить размеры блока перетаскиванием этой границы (угла) мышью.
На демо приведен пример подобного блока, размеры которого можно изменить только с потянув за один из двух уголоков. Плюс в опциях плагина блоку задана минимально возможная ширина.
Заметка
Чтобы меняло размеры и содержимое блока, верстка внутри масштабируемого блока должна быть резиновой.
Проверено в:
- IE 6-8
- Firefox 3
- Opera 9.5-10
- Safari 4
Кому хочется еще примеров идем на страничку с примерами.
Где это применить
Например, для появляющихся окон, размеры которых зачастую по умолчанию подгоняются так, чтобы пользователи с разрешением 1024×768 видели его полностью. В то время как у остальных пользователей не используются площади больших мониторов. Вот им-то и удобно будет растянуть себе подобные окна.
Или для гибких интерфейсов, вид которых пользователь настраивает сам.
Что качать
- jquery.js — библиотека jQuery (рекомендую не ниже версии 1.3.2 — 55Kb)
- jquery-ui-custom.js (~26.7 Kb) — собираем плагин из модулей. Выбираем:
- в UI Core: Core, Widget, Mouse
- в Interactions: Resizable
Быстрый старт
В HTML коде имеем обычный блок. К его id или class будем привязывать инициалицацию плагина.
<div id="resizable">тут какой-то контент</div>
В стилях обязательно задем этому блоку position: relative/absolute. Если нет желания раскапывать исходники плагина, тогда копируем кусок стилей с именами классов самого плагина:
#resizable {
[..]
position: relative; /* нужно обязательно для позиционирования границ, за которые будет тянуть пользователь */
}
/* стили, используемые плагином
----------------------------------*/
.ui-resizable-handle {
position: absolute;
font-size: 0.1px;
z-index: 99999;
display: block;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
display: none;
}
.ui-resizable-n { /* верхняя граница */
cursor: n-resize;
display: none;
}
.ui-resizable-s { /* нижняя граница */
cursor: s-resize;
display: none;
}
.ui-resizable-e { /* правая граница */
cursor: e-resize;
display: none;
}
.ui-resizable-w { /* левая граница */
cursor: w-resize;
display: none;
}
.ui-resizable-se { /* правый нижний уголок */
cursor: se-resize;
width: 7px;
height: 7px;
right: 1px;
bottom: 1px;
background: url(path-to/resize-rb.gif); /* углам и границам можно задать любой фон */
}
.ui-resizable-sw { /* левый нижний уголок */
cursor: sw-resize;
width: 7px;
height: 7px;
left: 1px;
bottom: 1px;
background: url(path-to/resize-lb.gif);
}
.ui-resizable-nw { /* левый верхний уголок */
cursor: nw-resize;
display: none;
}
.ui-resizable-ne { /* правый верхний уголок */
cursor: ne-resize;
display: none;
}
В завершении подключаем библиотеки и иницилизируем resize нужного нам элемента:
<script type="text/javascript" src="path-to/jquery-1.4.2.js"></script>
<script type="text/javascript" src="path-to/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript">
jQuery(function() {
jQuery("#resizable").resizable();
});
</script>
Теперь размеры блока можно менять.
А теперь подробнее
Опции
| disabled | активность фукции масштабирования:
|
|---|---|
| alsoResize | селектор элемента, который будет масштабироваться синхронно (по умолчанию отключено) |
| animate | происходит анимация по заверщению выбора новых размеров элемента (по умолчанию отключено) |
| animateDuration | скорость анимации (по умолчанию отключено «slow») |
| animateEasing | эффект анимации (по умолчанию отключено «swing») |
| aspectRatio | сохранение пропорций элемента
|
| autoHide | показ элементов, за которые можно потянуть только при наведении курсора мыши на элемент с изменяемыми размерами
|
| cancel | запрещает масштабирование указанных тегов. Так например можно запретить масштабирование, если оно применено например к div или любому другому тегу. По умолчанию — это :input,option |
| containment | задает принудительно размеры блоку, ориентруясь на указанный элемент в опциях. Возможные значения:
P.S. не очень понял зачем это нужно да и рабоатет как-то странно |
| delay | задержка в милисекундах, после которой будет доступна функция масштабирования. Т.е. зажимаем мышь на границе элемента, ждем эту самую задержку, потом тянем. Задержка сделана для избежания случайного масштабирования элементов. По умолчанию 0. |
| distance | на скольок изначально нужно изменить размеры объекта чтобы появилась возможность масштабировать элемент. Сделана для избежания случайного масштабирования элементов. По умолчанию 1. |
| ghost | показ полупозрачного «призрака» объекта. помогает пользователю понять как будет выглядеть элемент после масштабирования
|
| grid | задает шаг масштабирования в пикселях по осям x и y в виде массива [x,y] |
| handles | задает, какие границы элемента сможет использовать пользователь для масштабирования — строка зарезервированных значений через запятую (n, e, s, w, ne, se, sw, nw, all). По умолчанию — ‘e, s, se |
| helper | задает класс, который добавится proxy элементам во время изменения размеров. Например, можно изменяюмую область закрасить в какой-нибудь цвет. При этом размер самого элемента меняется тольок после того, как пользователь отпустит зажатую клавишу мыши. Этот механизм помогает сравнить текущие и новые размеры элемента. |
| maxHeight, maxWidth, minHeight, minWidth | задаем минимально допустимые размеры элемента в px |
Пример
Зададим чтобы тянуть блок можно было только за нижний правый или левый углы, плюс макимальная ширина элемента была 350px:
<script type="text/javascript">
jQuery(function() {
jQuery("#resizable").resizable({handles: "se, sw", minWidth: "350"});
});
</script>
События
| start | начало изменения размеров |
|---|---|
| resize | во время изменения размеров |
| stop | окончание изменения размеров |
Пример
<script type="text/javascript">
jQuery("#resizable" ).resizable({
start: function(event, ui) { [что-то делаем] }
});
</script>
Методы
| destroy | удаление возможности изменения размеров у элемента |
|---|---|
| disable | отключение возможности изменения размеров у элемента |
| enable | включение возможности изменения размеров у элемента |
| option | чтение или установка опций плагина |
| widget | возвращает элемент .ui-resizable |
Пример
<script type="text/javascript">
jQuery(function() {
jQuery("#resizable").resizable("destroy");
});
</script>
