【问题标题】:jQuery's visible upon scrolljQuery 在滚动时可见
【发布时间】:2014-07-09 22:01:51
【问题描述】:

我尝试使用jQuery visible 插件来检测元素在视口中是否可见。我使用这样的代码:

animateFrontPage: function(){
    var apps = 0;
    if($('#apps-shelf').visible(true)) {
        apps = 1;
        if(apps == 1) {
            $('#apps-shelf li').velocity("transition.bounceUpIn", { stagger: 150 });
            apps = 0
        }
    }
}

我使用滚动功能运行它:

$(window).scroll(function() {
    Functions.animateFrontPage();
});

问题是 - 每次滚动时动画都会重复。我能做些什么来预防它?

【问题讨论】:

  • 你可以使用一个标志。一旦动画完成一次,将其设置为 true,并且仅在标志为 false 时才执行动画。
  • 我相信我做到了。但它会随着滚动而重置。如果你的意思是别的,请发布一个例子。
  • 您希望动画只发生一次吗?因此,如果您滚动,查看动画,滚动离开,然后向后滚动 - 您只会看到一次吗?
  • 我希望它只发生一次,在我进一步滚动然后返回之后,它不应该动画。

标签: javascript jquery velocity.js


【解决方案1】:

如果您只希望动画显示一次,您可以为元素添加一个类以标记它已完成 - 然后每次只在元素没有此类时执行动画。也许是这样的:

animateFrontPage: function(){
    var $el = $('#apps-shelf');
    if($el.visible(true) && !$el.hasClass('finished')) {
        $el.addClass('finished');
        $el.find('li').velocity("transition.bounceUpIn", { stagger: 150 });
    }
}

更新

如果您希望其他动画在这些条件下运行,这是您需要的 else 语句:a)第一个元素 $('#apps-shelf') 的动画已经发生并且 b) 元素 $('#apps-shelf') 在屏幕上不再可见(例如,您已滚动过去)

animateFrontPage: function(){
    var $el = $('#apps-shelf');
    if($el.visible(true) && !$el.hasClass('finished')) {
        $el.addClass('finished');
        $el.find('li').velocity("transition.bounceUpIn", { stagger: 150 });
    } else if (!$el.visible(true) && $el.hasClass('finished')){
        //other animation here
    }
}

【讨论】:

  • 好的,这行得通,但如果我想让它在它消失时触发其他动画?尝试添加else removeClass,但它会循环运行。
  • 我已经更新了上面的答案。我假设“当它消失时”你的意思是一旦我们动画的原始元素离开屏幕?如果不是,请更详细地解释一下。但希望上面的更新应该是你所追求的 =)
猜你喜欢
  • 2013-10-01
  • 2014-09-05
  • 2019-03-22
  • 2012-02-17
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
相关资源
最近更新 更多