Wow.js 每次向上或向下滚动时重复动画

Wow.js repeat animation every time you scroll up or down

我是 Jquery 的新手。我希望我的带有 Wow.js 的动画可以 运行 不止一次。例如:我滚动到页面底部并查看所有动画,如果我滚动回顶部,我会再次看到动画,就像您向下滚动时一样。我希望我解释了自己。我已经看到很多网站在他们的页面上重复动画,但不幸的是我不记得它们,我无法提供 link.

我已经试过了:

$(window).scroll(function(){
    new WOW().init();
}

但是如果你滚动一点,它也会重复动画,而且很难看。我试着更好地解释我:我的动画有一个,如果它聚焦,动画就会被触发,然后我向下滚动到另一个 div,之前的 div 不再可见(不在window 视口),然后我再次滚动回我的 div 动画并再次触发动画。

对于这个乱七八糟的问题,我很抱歉,但我真的不知道该如何解释。

提前致谢!

Benoît Boucart 的这个例子展示了当用户滚动出视图并返回时动画是如何 "reset" 的。这里的关键是删除动画的第二个函数 css class 当元素滚出视图时。我希望 WOW.js 能够实现这一点,但他们表示他们不打算这样做。

http://codepen.io/benske/pen/yJoqz

片段:

// Showed...
$(".revealOnScroll:not(.animated)").each(function () {
  var $this     = $(this),
      offsetTop = $this.offset().top;

  if (scrolled + win_height_padded > offsetTop) {
    if ($this.data('timeout')) {
      window.setTimeout(function(){
        $this.addClass('animated ' + $this.data('animation'));
      }, parseInt($this.data('timeout'),10));
    } else {
      $this.addClass('animated ' + $this.data('animation'));
    }
  }
});
// Hidden...
$(".revealOnScroll.animated").each(function (index) {
   var $this     = $(this),
       offsetTop = $this.offset().top;
   if (scrolled + win_height_padded < offsetTop) {
     $(this).removeClass('animated fadeInUp flipInX lightSpeedIn')
   }
});

如果用户想在两个事件上重复动画,即

  • onScrollUp
  • onScrollDown

那么这将是一个很好的解决方案:

首先创建一个 addBox 函数,它将有助于将新元素推入 WOW boxes 数组。

WOW.prototype.addBox = function(element){
    this.boxes.push(element);
};

然后使用 jQueryscrollspy 插件来帮助检测哪个元素不在视图中,然后将 WOW 推送为:

$('.wow').on('scrollSpy:exit',function(){
    var element = $(this);
    element.css({
        'visibility' : 'hidden',
        'animation-name' : 'none'
    }).removeClass('animated');
    wow.addBox(this);
});

Solution Courtesy: ugurerkan

@vivekk 的回答是正确的我只是添加了一个工作示例,以便人们可以轻松地得到这个

查看 Demo fiddle

         <script>
         // Repeat demo content
           var $body = $('body');
           var $box = $('.box');
          for (var i = 0; i < 20; i++) {
          $box.clone().appendTo($body);
            }

          // Helper function for add element box list in WOW
         WOW.prototype.addBox = function(element) {
         this.boxes.push(element);
        };

        // Init WOW.js and get instance
       var wow = new WOW();
       wow.init();

      // Attach scrollSpy to .wow elements for detect view exit events,
        // then reset elements and add again for animation
         $('.wow').on('scrollSpy:exit', function() {
        $(this).css({
         'visibility': 'hidden',
         'animation-name': 'none'
        }).removeClass('animated');
        wow.addBox(this);
       }).scrollSpy();

       </script>