自清除jquery.each()中的间隔

时间:2013-02-13 14:20:10

标签: jquery setinterval

我需要在加载后立即使用JavaScript定位/调整图像大小。为了保持纵横比不变,我必须知道图像的宽度/高度。我可以使用.load事件,但这样做太晚了,使重新定位可见。相反,我使用以下技术。

 var interval = setInterval(function(){
     if ($('img').height()) { //This means we have got height.
          //Code that uses $('img').height().
          clearInterval(interval);
     }
 },10);

这确保代码在我有图像的宽度/高度信息时以及在它完全加载之前执行。

然而,现在,我需要为一堆图像(特别是在jQuery插件中)执行此操作,问题似乎是第一个clearInterval调用清除所有间隔,除了第一个{ {1}}未触动过。

我尝试将img jQuery对象中的区间ID保存为属性($(this)和数据$(this).interval = setInterval( ...

我还尝试首先将id保存在变量中,然后在$(this).data("interval", setInterval( ...调用的右括号之后将其分配给$(this).data("interval",interval)

这样做的正确方法是什么,以便每个间隔都自行清除?

我的代码的完整列表如下

setInterval

1 个答案:

答案 0 :(得分:1)

脱离我的头顶:

  • $t$p不应该是全局变量?即被宣布为

    var $t = $(this),
        $p = t.parent();
    
  • 加载图像并等待10毫秒来计算它们的大小的方法在我看来是危险的:它可能会在不同的浏览器中产生不同的结果

  • 更好地预加载图像并在显示之前计算它们的大小:

    var img = new Image();
    img.src = 'http://your-image-url';
    $(img).load(function(){
        // here, deal with img.width and img.height
        // and then display
    });