图示
核心功能
- 让页面滚动更有趣
- 通过WOW.js,可以在页面逐渐向下滚动的过程中逐渐释放这些动画效果。也就是说:当我们向下滚动页面时,可以省去很多判断条件,让CSS动画逐渐展示出来。
特点
- 轻量级类库, 不依赖jQuery,超简单的安装和使用,与animate.css配合,只需要短短几行代码就可以实现很多特效。
- 容易定制,我们可以改变动画去设置喜欢的风格、延迟、长度、偏移和迭代等等。
兼容性
WOW.js要和animate.css配合使用,所有其也只兼容支持CSS3 animate属性的浏览器:IE10+、Firefox、Chrome、Opera、Safari。
官网
https://www.delac.io/wow/
如何使用?
-
基本用法
// 引入文件 <link rel="stylesheet" href="animate.min.css"> <script src="wow.min.js"></script> // 在相对的HTML标签中通过类进行引用 <div class="wow slideInLeft"></div> <div class="wow slideInRight"></div> // 在JavaScript中进行初始化 new WOW().init();
-
常用的属性
data-wow-delay: 动画开始前延迟 data-wow-duration: 动画持续时长 data-wow-iteration: 动画重复次数 data-wow-offset: 距离浏览器底部到隐藏框顶部的距离(偏移量) data-wow-offset:用于决定当前的元素在滚动的时候到达怎样的位置出现(是在滚动之前出现、滚动之后出现,还是滚动的时候出现)
data-wow-offset = scroll + 浏览器高度 - 元素头部到文档顶部高度
= 绿色 + 紫色 - 红色 -
WOW的默认配置参数
var wow = new WOW({ boxClass: 'wow', // 动画元素的CSS类(默认类名wow) animateClass:'animated', // 动画CSS类 (默认类名animated) offset: 0, // 距离可视区域多少开始执行动画(默认为0) mobile: true, // 是否在移动设备上执行动画 (默认是true) }); wow.init();
WOW.js存在怎样的问题?
- WOW.js实例的动画只能加载一次,如果要重新执行动画必须要进行刷新。
- 但是在实际开发中,更多时候动画是只加载一次,否则会造成视觉错乱。那如果要多次重复展现动画该如何处理呢?
WOW初体验
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/animate.css">
<title></title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
border: none;
}
.box{
width: 900px;
margin: 20px auto;
overflow: hidden;
border: 1px solid red;
}
.box div{
width: 450px;
height: 300px;
}
.box div:nth-child(1){
background-color: green;
float: left;
}
.box div:nth-child(2){
background-color: red;
float: right;
}
</style>
</head>
<body>
<div class="box">
<div class="wow flash"></div>
<div class="wow flip"></div>
</div>
<script src="js/wow.js"></script>
<script>
window.addEventListener('load', function () {
new WOW().init();
});
</script>
</body>
</html>
WOW参数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/animate.css">
<title></title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
border: none;
}
.box{
width: 900px;
margin: 20px auto;
overflow: hidden;
border: 1px solid red;
}
.box div{
width: 450px;
height: 300px;
}
.box div:nth-child(1){
background-color: green;
float: left;
}
.box div:nth-child(2){
background-color: red;
float: right;
}
</style>
</head>
<body>
<div class="box">
<div class="wow slideInLeft" data-wow-delay="1s"></div>
<div class="wow slideInRight" data-wow-duration="1s" data-wow-iteration="3"></div>
</div>
<script src="js/wow.js"></script>
<script>
window.addEventListener('load', function () {
new WOW().init();
});
</script>
</body>
</html>
scrollReveal.js
图示
基本概念
- scrollReveal是一个兼容PC端和移动设备的滚动动画库。不同的是 WOW.js 的动画只播放一次,而 scrollReveal.js 的动画可以播放一次或无限次;
- 官网
① https://scrollrevealjs.org/
② https://github.com/scrollreveal/scrollreveal
特点
scrollReveal同时兼容PC端和移动端
0依赖(不依赖于jQuery,也不依赖于animate.css)
定制性高,使用简单方便快捷
浏览器兼容
虽然scrollReveal.js不依赖于animate.css,但是它的动画也是用CSS3创建的,所以依然需要支持HTML5和CSS3比较好的浏览器,比如: IE10+、Firefox、Chrome、Opera、Safari。
使用方式
-
基本使用
// 引入文件 <script src="js/scrollReveal.js"></script> // html <div class="box"></div> // JavaScript window.onload = function () { window.sr = ScrollReveal(); sr.reveal('.box'); }
-
常用参数
var config = { reset: false, // 滚动鼠标时,动画开关 origin: 'bottom', // 动画开始的方向 duration: 500, // 动画持续时间 delay: 0, // 延迟 rotate: {x:0, y:0, z:0}, // 过度到0的初始角度 opacity: 0, // 初始透明度 scale: 0.9, //缩放 easing: 'cubic-bezier(0.6, 0.2, 0.2, 1)', // 缓动'ease', 'ease-in-out','linear'... // 回调函数 beforeReveal: function(domEl){}, beforeReset: function(domEl){}, afterReveal: function(domEl){}, afterReset: function(domEl){} }; window.sr = ScrollReveal(); sr.reveal('.sr', config);
scrollReveal 和 WOW的区别和联系
它们都不依赖jQuery;
wow依赖于animate.css ,ScrollReveal不依赖任何其他插件或者库;
wow的释放动画,只能够实现一次,而ScrollReveal可以无限次使用;
ScrollReveal 参数相对比较多,比较复杂些;
实际工作中,用wow比较多。
scrollReveal 初体验
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
border: none;
}
ul{
width: 980px;
margin: 0 auto;
overflow: hidden;
}
ul li{
width: 200px;
height: 300px;
background-color: green;
margin: 10px;
float: left;
}
</style>
</head>
<body>
<ul>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
</ul>
<script src="js/scrollreveal.min.js"></script>
<script>
window.onload = function () {
ScrollReveal().reveal('.sr', {
reset: true, // 滚动鼠标时,动画开关
origin: 'right', // 动画开始的方向
duration: 1000, // 动画持续时间
delay: 0, // 延迟
rotate: {x:0, y:0, z:0}, // 过度到0的初始角度
opacity: 0.3, // 初始透明度
scale: 0.4, //缩放
easing: 'cubic-bezier(0.6, 0.2, 0.2, 1)', // 缓动'ease', 'ease-in-out','linear'...
// 回调函数
beforeReveal: function(domEl){},
beforeReset: function(domEl){},
afterReveal: function(domEl){},
afterReset: function(domEl){}
});
}
</script>
</body>
</html>
利用ScrollReveal.js实现瀑布流
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
border: none;
}
.box{
width: 1230px;
margin: 0 auto;
overflow: hidden;
}
.box>ul{
width: 300px;
float: left;
margin-right: 10px;
}
.box>ul:last-child{
margin-right: 0;
}
</style>
</head>
<body>
<div class="box">
<ul>
<li class="sr"><img src="images/01.jpg" alt=""></li>
<li class="sr"><img src="images/02.jpg" alt=""></li>
<li class="sr"><img src="images/03.jpg" alt=""></li>
<li class="sr"><img src="images/04.jpg" alt=""></li>
<li class="sr"><img src="images/05.jpg" alt=""></li>
<li class="sr"><img src="images/06.jpg" alt=""></li>
<li class="sr"><img src="images/07.jpg" alt=""></li>
<li class="sr"><img src="images/08.jpg" alt=""></li>
<li class="sr"><img src="images/09.jpg" alt=""></li>
<li class="sr"><img src="images/10.jpg" alt=""></li>
</ul>
<ul>
<li class="sr"><img src="images/11.jpg" alt=""></li>
<li class="sr man"><img src="images/12.jpg" alt=""></li>
<li class="sr"><img src="images/13.jpg" alt=""></li>
<li class="sr"><img src="images/14.jpg" alt=""></li>
<li class="sr"><img src="images/15.jpg" alt=""></li>
<li class="sr"><img src="images/16.jpg" alt=""></li>
<li class="sr"><img src="images/17.jpg" alt=""></li>
<li class="sr"><img src="images/18.jpg" alt=""></li>
<li class="sr"><img src="images/19.jpg" alt=""></li>
<li class="sr"><img src="images/20.jpg" alt=""></li>
</ul>
<ul>
<li class="sr"><img src="images/21.jpg" alt=""></li>
<li class="sr"><img src="images/22.jpg" alt=""></li>
<li class="sr"><img src="images/23.jpg" alt=""></li>
<li class="sr"><img src="images/24.jpg" alt=""></li>
<li class="sr"><img src="images/25.jpg" alt=""></li>
<li class="sr"><img src="images/26.jpg" alt=""></li>
<li class="sr"><img src="images/27.jpg" alt=""></li>
<li class="sr"><img src="images/28.jpg" alt=""></li>
<li class="sr"><img src="images/29.jpg" alt=""></li>
<li class="sr"><img src="images/30.jpg" alt=""></li>
</ul>
<ul>
<li class="sr"><img src="images/31.jpg" alt=""></li>
<li class="sr"><img src="images/32.jpg" alt=""></li>
<li class="sr"><img src="images/33.jpg" alt=""></li>
<li class="sr"><img src="images/34.jpg" alt=""></li>
<li class="sr"><img src="images/35.jpg" alt=""></li>
<li class="sr"><img src="images/36.jpg" alt=""></li>
<li class="sr"><img src="images/37.jpg" alt=""></li>
<li class="sr"><img src="images/38.jpg" alt=""></li>
<li class="sr"><img src="images/39.jpg" alt=""></li>
<li class="sr"><img src="images/40.jpg" alt=""></li>
</ul>
</div>
<script src="js/scrollreveal.min.js"></script>
<script>
window.onload = function () {
window.sr = ScrollReveal();
sr.reveal('.sr', {
reset: true, // 滚动鼠标时,动画开关
});
sr.reveal('.man', {
reset: true, // 滚动鼠标时,动画开关
origin: 'right', // 动画开始的方向
duration: 500, // 动画持续时间
delay: 500, // 延迟
rotate: {x:100, y:100, z:100}, // 过度到0的初始角度
opacity: 0.3, // 初始透明度
scale: 3, //缩放
})
}
</script>
</body>
</html>
利用ScrollReveal.js实现序列帧动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
border: none;
}
.box{
width: 980px;
margin: 0 auto;
overflow: hidden;
}
.box li{
width: 50px;
height: 50px;
background-color: #ccc;
margin: 10px;
float: left;
}
</style>
</head>
<body>
<ul class="box">
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
<li class="sr"></li>
</ul>
<script src="js/scrollreveal.min.js"></script>
<script>
window.onload = function () {
window.sr = ScrollReveal();
sr.reveal('.sr', {
reset: true, // 滚动鼠标时,动画开关
origin: 'left', // 动画开始的方向
duration: 500, // 动画持续时间
}, 100);
}
</script>
</body>
</html>