JSLib

Материал из YourcmcWiki
Перейти к: навигация, поиск

Библиотека мелких 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.