JSLib
Библиотека мелких JavaScript-ов. Не люблю я использовать JS-фреймворки — без них всё отлично делается.
Содержание |
Drag&Drop
Простая библиотечка для организации Drag&Drop, основанная на http://javascript.ru/ui/draganddrop
Исходник: DragDrop.js.
Использование:
dragObject = new DragObject(element); // то, что тащим dropTarget = new DropTarget(element); // то, куда тащим
Обработчики DropTarget:
- boolean dropTarget.canAccept(DragObject)
Вернуть true, если эта цель может принять этот DragObject. - dropTarget.onAccept(DragObject, pos = { x: int, y: int }): Объект перетаскивают на эту цель и отпускают.
x, y - относительные цели координаты, в которых объект отпущен - dropTarget.onEnter()
Объект приносят на этой цель - dropTarget.onLeave()
Объект уносят с этой цели - dropTarget.onMove(pos = { x: int, y: int })
Объект таскают по цели
x, y - относительные цели координаты, в которых объект находится
Обработчики DragObject:
- dragObject.onDragStart(offset = { x: int, y: int })
Объект начинают перетаскивать
x, y - относительные координаты, за которые пользователь взял объект мышкой - dragObject.onDragMove(x, y)
Объект перетаскивают
x, y - абсолютные координаты нахождения объекта - dragObject.onDragSuccess(DropTarget, pos = { x: int, y: int })
Объект принят целью
x, y - относительные цели координаты, в которых объект отпущен - dragObject.onDragFail()
Объект не принят ни одной целью
Соответственно, все эти обработчики можно переопределять. Так и работать.
Можно даже унаследоваться от класса и написать обработчики прототипами:
function MyDropTarget(e) { DropTarget.call(this, e); } MyDropTarget.prototype = new DropTarget(); MyDropTarget.prototype.onAccept = function(obj, pos) {...};
clone
Функция клонирования и дампилка JS-структур данных. Исходник: clone.js.
exAttach
В целом — ненужная вещь, полезна, только если не хочется рожать лишнее замыкание function(ev){ callHandler(ev,this); }.
Обычные JS-события имеют некоторые недостатки. Во-первых, им не хватает кроссбраузерности методов:
- Установки обработчика в разных браузерах.
- Остановки «всплывания» (bubbling).
- Предотвращения выполнения действия по умолчанию.
- Определения элемента, на котором произошло событие.
Во-вторых, из-за того же bubbling’а цель события вообще определяется нетривиально — если кликнуть по дочернему элементу, родительскому он и придёт как цель события, даже если вы этого не хотели.
exAttach все эти недостатки ликвидирует. Если ставишь обработчик через exAttach, точно знаешь, на какой элемент придёт событие. То есть логичность — поставил onclick на div, и знаешь, что если кликнут по нему, то и целью события будет он. Ну и плюс кроссбраузерность. Тут, правда, есть минус — если работаешь с exAttach, может понравиться остановка всплывания, а это сразу ограничивает обработку событий методом установки глобального обработчика.
Обработчики устанавливаются так:
exAttach(element ИЛИ "element id", "имя события (без on)", обработчик)
Обработчики — функции двух аргументов (ev, e), где ev — объект события, а e — элемент, на котором оно РЕАЛЬНО произошло.
Значение возврата обработчиков трактуется так:
- любое ложное значение — событие может всплывать дальше, действие по умолчанию выполняется.
- число «2» — событие не всплывает, действие по умолчанию не выполняется.
- любое другое правдивое значение — событие не всплывает, но действие по умолчанию выполняется.
Исходники: exAttach.js.
SimpleAutocomplete
SimpleAutocomplete. Раньше назывался SHint.
iframeajax
Псевдо-AJAX через отправку невидимой формы в невидимый iframe. Кроссбраузерный. Использовать очень просто:
- iframeajax(адрес, { параметр : значение, ... })
- возвращаемая страница должна иметь метод window.loaded(), совершающий требуемые действия
Хрень, конечно, но забавная.
Исходник: iframeajax.js.