2 комментария so far.
Leave a Comment
Нужно было сделать простенькую очередь, чтобы добавить много колбэков, а потом выполнить последний из очереди по таймауту, отсчитываемому от времени последнего добавления.
Очередь получилась простенькая (за полчаса много и не сделаешь).
Использование:
//опциональное время в милисекундах - таймаут от последнего события
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 секунд после наступления последнего из событий в консоль выведется соответствующее сообщение.
Код:
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:)