【问题标题】:jquery element in viewport + each function视口中的jquery元素+每个函数
【发布时间】:2013-09-13 15:55:49
【问题描述】:

我正在使用一个 jquery 插件,当被监控的元素进入/离开视口 (http://remysharp.com/2009/01/26/element-in-view-event-plugin/) 时会触发一个事件,我可以让它与 .addClass 或 .removeClass 一起使用,但不能它与 .each + .fadeIn 一起使用,我猜这是我的一个简单的语法错误。

完美运行:

$('#foo .inAndOut').bind('inview', monitor);
function monitor(event, visible)
    {
    if(visible)
    {
      $(this).removeClass('stop').addClass('start');
    }
    else
    {
      $(this).removeClass('start').addClass('stop');
    }
}

我希望能够将它与以下(经过测试和工作的)功能一起使用:

   $("#DIV1, #DIV2, #DIV3").each(function(i) {
         $(this).delay(8000).delay(i*1500).fadeIn();
   });

这个方法试过了,还是不行:

$("#DIV1, #DIV2, #DIV3").bind('inview', monitor);
function monitor(event, visible)
    {
    if(visible)
    {
      $("#DIV1, #DIV2, #DIV3").each(function(i) {
          $(this).delay(8000).delay(i*1500).fadeIn();
      });
    }
    else
    {
      alert('out');
    }
}

我对任何事情都持开放态度,包括完全不同的处理方式;谢谢。

【问题讨论】:

  • 控制台是否出现任何错误?
  • 没有控制台错误。页面加载正常,但与此代码无关。
  • 提示:您可以使用8000 + (i * 1500) 拨打delay 一次
  • 我会使用那个延迟提示;谢谢。
  • 另外,如果您向我们提供 [jsfiddle.net] 显示您的相关代码,我们将更容易帮助您解决问题。

标签: jquery each


【解决方案1】:

试试这个方法:

// Cache elements we're actioning on
var elems = $('#foo, #bar');

// Give them a custom attribute (I've chosen attr() here, but you could use data())
elems.each(function (i) {
    $(this).attr('data-inview-index', i);
});

// Now bind the inview stuff
elems.bind('inview', function (event, visible) {
    // And we can access the custom attribute for use here.
    var i = $(this).attr('data-inview-index');

    if (visible) {
        $(this).text(i);
    }
});

演示: http://jsfiddle.net/p7jDg/2/

使用.data()http://jsfiddle.net/p7jDg/3/

【讨论】:

  • 耶稣。这有点过头了,但我会尝试用我发布的小提琴来解决这个问题;谢谢你,我总是被人们的乐于助人所震撼。
  • 好吧,我已经让你的代码在 jsfiddle 中运行,但是 .each + .slideDown 会触发它是否在视口中。我需要它只在视野范围内开火,并在离开视野时停止开火。进行中的工作:jsfiddle.net/yVrC6/20
  • 好的,我非常非常接近让它工作;见:jsfiddle.net/yVrC6/58。我只是不使用如何在事物离开视图(暂停时间)然后重新进入视图(从您离开的地方恢复)时暂停/恢复 .each + .slideDown。
  • jsfiddle.net/yVrC6/145 我已将您的else 条件更改为inviewSlider.stop().fadeOut();。这将确保一次清除所有元素上的队列。
猜你喜欢
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2013-05-09
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多