NilColor

Guess what? You're on my site!

Расширение jQuery

without comments

jQuery – небольшая и крайне удобная JavaScript библиотека позволяющая сильно расширить возможности вэб-приложения не рисую при этом жутковатых конструкций если надо сделать AJAX-запрос или потеребить DOM документа. Вот например вполне себе работающий кусок JavaScript с использованием jQuery:

$alertHolder = $('<div></div>')  
.attr('id', 'tsm_alert')  
.addClass('tsm_alert')  
.append($('<h1 id="alert_title"></h1>'))  
.append($('<img src="/media/tsm/img/close.gif" title="Закрыть" />').click(tsm_alert_close))  
.append($('<div id="alert_text"></div>'))  
.insertBefore(document.body.firstChild)  
.hide();

Что тут делается? Это кусок из кода, который приделывает к вэб-приложению аналог alert’а, но не такой раздражающий ;)

Ну и как и положено такого рода библиотекам (да и JavaScript’у в целом) – ее можно расширять своими плагинами.

Больших творений у меня пока нет — пока только одно расширение (для удобства) проникло в мои скрипты:

//Проверка элемента на его существование  
jQuery.fn.exists = function() {
    return this.length > 0;
};

В итоге можно писать не if $('#tsm_alert').length)..., а более красиво if $('#tsm_alert').exists().... Мелочь конечно – но визуально более приятно.

И вот буквально сегодня попалась мне очень интересное (и понятное) описание того, как можно писать свои плагины для jQuery. Теперь думаю я таки смогу добавить в jQuery свой idleTracker как плагин ;) Ибо текущая его реализация не очень красива:

$(document).ready(function() {
    // ----------------------------------------------------- //
    // Отслеживание активности в окне браузера. После 10 сек.
    // неактивности
    // генерится событие state:idle. При активности
    // пользователя -- генерится state:active
    // Активность пользователя - прокрутка окна браузера,
    // изменение размеров окна, движения мышью или нажатие
    // клавиш на клавиатуре
    // 
    var _events = [[window, 'scroll'],
                   [window, 'resize'],
                   [document, 'mousemove'],
                   [document, 'keydown']];
    var _timer;
    jQuery.each(_events, function(i, e) {
        $(e[0]).bind(e[1], function () {onActive();});
    });
    // 
    // обработчик состояния state:active в окне браузера и
    // перезапуск 10-и сек. ожидания не активности пользователя
    // 
    function onActive(){
        $(document).trigger('state:active');
        clearTimeout(_timer);
        _timer = setTimeout(
            function () {$(document).trigger('state:idle');},
            10000
        );
    }
    // 
    // обработчик состояния state:idle в окне браузера
    // 
    $(document).bind(
        'state:idle',
        // можно сделать что-то более полезное, чем
        // банально писать в console
        function () {console.log('system idled');}
    );
});

update: что-то по началу у меня были проблемы с markdown… блоки кода выглядели – ужас. сейчас вроде ОК. Если что – пишите в коменты.

Written by NilColor

January 11th, 2008 at 9:16 am

Posted in jquery

Tagged with , , , ,

Leave a Reply