jQuery使用超时中断.each()

时间:2013-03-28 13:19:09

标签: jquery google-maps settimeout each break

我正在使用谷歌地图,并希望显示多个标记。 如果输入城市名称,地图将跳转到该位置,您将获得包含该地区所有公司的列表。按下按钮,每个公司都将显示在地图上。 标记应该稍微下降,所以我做了这样的函数:

$('#show_markers').click(function()
{
  $('.div_with_information').each(function(index)
  {
    var location = $(this);//includes multiple infomations like lat, lng, name, info...
    setTimeout(function()
    {
      set_marker(location);//function to create google marker with infobox ect.
    },100*index);
  });
});

这非常有效。我需要延迟一个漂亮的下拉动画并​​检查标记的坐标。 但有时会有许多标记要删除脚本需要很多时间。

我正在寻找的是完全阻止“标记雨”的功能。

$('#stop_button').click(stop_drop);

我尝试了很多东西,但没有按照我的意愿行事。 我希望你有一些好主意。

1 个答案:

答案 0 :(得分:0)

var is_running = false;
var timeout;

$('#show_markers').click(function()
{
  if (is_running)
    return;

  is_running = true;

  var index = 0;
  var divs = $('.div_with_information');
  var num = divs.length;

  timeout = setTimeout(on_set_marker_event, 100);

  function on_set_marker_event()
  {
    var location = divs.eq(index);
    set_marker(location);

    index++;

    if (is_running && index < num)
       timeout = setTimeout(on_set_marker_event, 100);
  });
});

$('#stop_button').click(function()
{      
  is_running = false;
  clearTimeout(timeout);
});