在这篇教程中,我将为你介绍如何在页面滚动时触发CSS动画。这种效果使用JavaScript和CSS就能做到。
Jeet Grid System website就是使用这种小技巧的例子,当你向下滚动的时候,CSS的transform
、animation
就被触发了。
想要达到这种目的,有很多Javascript/jQuery 插件可以用,比如WOW,在这篇教程中,我将为你展示如何不适用插件做到这种效果。
模板
那么我们开始了,首先是写好HTML标签,revealOnScroll
类必须家在需要在滚动时触发的元素上面。
<div data-animation="flipInX" data-timeout="400">...some content here...
data-animation
这个属性声明了将会触发animation.css
中animation的名字,当然添加额外的timeout
参数也可以使用同样的方法,这样做当你有很多元素在同个位置被触发时很有用。
Javascript 和 CSS animation
然后,我们需要定义一些变量在JavaScript文件的顶部,(不要忘记加载jQuery和Modernizr需要检查是否为触摸设备)。还有为了实现动画效果,我加载了animation.css
var $window = $(window),
win_height_padded = $window.height() * 1.1,
isTouch = Modernizr.touch;
然后我们需要监听滚动事件,并触发我们的函数。
$window.on('scroll', revealOnScroll);
在revealOnScroll
函数里面我们检查元素是否需要执行动画,如果是,animation
类就会添加,并触发了CSS animation。
function revealOnScroll() {
var scrolled = $window.scrollTop();
$(".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'));
}
}
});
是不是很容易就完成了~ 还有另一个小技巧,当元素不可见的时候,animation
类被移掉,这样在一次请求里面多次animate
动画。
本文根据@Benoît Boucart的《ANIMATIONS ON SCROLL》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://blog.webbb.be/trigger-css-animation-scroll/。
如需转载,烦请注明出处:http://www.w3cplus.com/css3/trigger-css-animation-scroll.html