当前位置:嗨网首页>书籍在线阅读

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();
});