26-解决方案
5.6.2 解决方案
编写一个自定义迭代器,使用 setTimeout() 延迟回调:
// jQuery.each() 回调在一个数组(通常是一个jQuery对象,但是可以是任意数组)中循环,为每个元素调用回调函数,在每次回调之间插入延时。回调接收的参数与普通的jQuery.each()回调函数相同
jQuery.slowEach = function( array, interval, callback ) {
if( ! array.length ) return;
var i = 0;
next();
function next() {
if( callback.call( array[i], i, array[i] ) !== false )
if( ++i < array.length )
setTimeout( next, interval );
}
return array;
};
//在"this"(jQuery对象)中循环并为每个元素调用一个回掉函数,在回调之间插入延时
//回调函数接收的参数与普通的jQuery(...).each()相同
jQuery.fn.slowEach = function( interval, callback ) {
return jQuery.slowEach( this, interval, callback );
};
然后,简单地将 .each() 代码改为使用 slowEach() 并定义一个超时值就可以了:
//每隔半秒显示一个元素
$('.reveal').slowEach( 500, function() {
$(this).show();
});