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);
};
然后使用 jQuery
和 scrollspy 插件来帮助检测哪个元素不在视图中,然后将 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>
我是 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);
};
然后使用 jQuery
和 scrollspy 插件来帮助检测哪个元素不在视图中,然后将 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>