2 Responses so far.
Leave a Comment
Нужно было сделать простенькую очередь, чтобы добавить много колбэков, а потом выполнить последний из очереди по таймауту, отсчитываемому от времени последнего добавления.
Очередь получилась простенькая (за полчаса много и не сделаешь).
Использование:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//опциональное время в милисекундах - таймаут от последнего события var queue = queueFactory( 5000 ); // у меня дёргается скрипт по определённому событию, в нём написано $( window ).bind( 'event1', function( Event, Data ) { if ( ! queue.length() ) { showLoader(); } queue.add( function() { console.log( 'event1' ); } ); } ); $( window ).bind( 'event2', function( Event, Data ) { if ( ! queue.length() ) { showLoader(); } queue.add( function() { console.log( 'event2' ); } ); } ); |
В итоге через 5 секунд после наступления последнего из событий в консоль выведется соответствующее сообщение.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
var queueFactory = (function( Timeout ) { "use strict"; /** * Объект-реализация очереди * * @since 19.07.11 * @author bullgare * @param int Timeout (мс) если передан, то очередь сама будет разгребаться с указанным таймаутом */ var QueueObject = function( Timeout ) { var _callbacks = []; // если не null, то при добавлении в очередь будет запускаться таймер на разгребание очереди var timeoutDelay = Timeout ? parseInt( Timeout ) : null; var currentTimeout = null; /** * Добавить колбэк-функцию в очередь * * @since 19.07.11 * @author bullgare * @param Callback колбэк-функция */ var _add = function( Callback ) { _callbacks.push( Callback ); if ( timeoutDelay ) { if ( currentTimeout ) { clearTimeout( currentTimeout ); } currentTimeout = setTimeout( function() { executeLastAndClear(); }, timeoutDelay ); } }; //===========================================================================}}} /** * Запустить последнюю функцию в очереди * * @since 19.07.11 * @author bullgare */ var _executeLast = function() { var lastCallback = _callbacks.pop(); if ( typeof lastCallback !== 'undefined' ) { lastCallback(); } }; //===========================================================================}}} /** * Очистить очередь * * @since 19.07.11 * @author bullgare */ var _clear = function() { _callbacks = []; currentTimeout = null; }; //===========================================================================}}} /** * @since 19.07.11 * @author bullgare */ var executeLastAndClear = function() { _executeLast(); _clear(); }; //===========================================================================}}} // это объект с доступными методами return { add: _add, executeLastAndClear: executeLastAndClear, clear: _clear, length: function() { return _callbacks.length; } }; }; //===========================================================================}}} return function( Timeout ) { return new QueueObject( Timeout ); }; }()); |
Для отправки комментария вам необходимо авторизоваться.
Do you get my comment?
Thank you for supporting SweetCaptcha.com FREE project!
;-)
Josh
SweetCaptcha Support Group
It’s awesome!
I almost have no spam anymore:)