Vue+wow.js+animate.css-实现页面滚动可视区域动画效果展示-案例

Posted JackieDYH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue+wow.js+animate.css-实现页面滚动可视区域动画效果展示-案例相关的知识,希望对你有一定的参考价值。

说明

wowjs-当页面向下滚动时,动画出现;当页面向上回滚时,动画不会回退。 

安装

npm install wowjs --save-dev
npm install animate.css --save

方式一 -全局引入

main.js

// 使用样式库
import animated from 'animate.css';
Vue.use(animated);

// 滚动动画 wow.js
import  WOW  from 'wowjs'
Vue.prototype.$wow = new WOW(
  boxClass: 'wow', // default
  animateClass: 'animated', // default
  offset: 150, // default
  mobile: true, // default
  live: false,

  // live为true时,控制台会提示:MutationObserver is not supported by your browser. & WOW.js cannot detect dom mutations, please call .sync() after loading new content.

  callback: function (box) 
    console.log("WOW: animating <" + box.tagName.toLowerCase() + ">")
  
);
属性/方法类型默认值说明
boxClass字符串‘wow’需要执行动画的元素的 class
animateClass字符串‘animated’animation.css 动画的 class
offset整数0距离可视区域多少开始执行动画
mobile布尔值true是否在移动设备上执行动画
live布尔值true异步加载的内容是否有效

offset为0时,设置动画的元素在出现在浏览器可视区域时执行动画

使用

.vue文件中,先初始化wow

// watch: 
// 异步加载部分,使用watch初始化
//   xxxx() 
//     this.$nextTick(() => 
//       // 在dom渲染完后,再执行动画
//       this.$wow.init();
//     );
//   ,
// ,
mounted() 
this.$nextTick(() => 
  this.$wow.init();
);
,
完成初始化后,在需要添加动画的元素上,添加上相关动画的类名即可
 <div class="wow animate__animated animate__fadeIn">900</div>
	wow 为配置中的动画类名,必要!
	animate__animated animate__fadeIn 为animate.css 的动画效果

1. 自定义动画持续时间
添加 data-wow-duration="2s" 
<div class="wow animate__animated animate__fadeIn" data-wow-duration="2s">900</div>

2. 自定义动画延迟时间
添加 data-wow-delay="5s"
<div class="wow animate__animated animate__fadeIn" data-wow-delay="5s">900</div>

3. 自定义滚动距离
 添加 data-wow-offset="200"   效果:当元素距离可视区域200时开始执行动画(元素顶部到浏览器底部的距离)
<div class="wow animate__animated animate__fadeIn" data-wow-offset="200">900</div>

4. 自定义动画重复次数
 添加 data-wow-iteration="2"  效果:动画会连续播放2次
<div class="wow animate__animated animate__fadeIn" data-wow-iteration="2" >900</div>

若想动画无限重复播放,则使用  data-wow-iteration="infinite"
<div class="wow animate__animated animate__fadeIn" data-wow-iteration="infinite" >900</div>

全量代码 

<template>
  <div class="warp">
    <span>内容</span>
    <div class="wow animate__animated animate__fadeIn">900</div>
    <div class="wow animate__animated animate__fadeIn" data-wow-duration="2s">
      900
    </div>
    <div class="wow animate__animated animate__fadeIn" data-wow-delay="5s">
      900
    </div>
    <div style="height: 1200px"></div>
    <!--  添加 data-wow-offset="200"   效果:当元素距离可视区域200时开始执行动画(元素顶部到浏览器底部的距离) -->
    <div class="wow animate__animated animate__fadeIn" data-wow-offset="200">
      900
    </div>
    <div style="height: 1300px"></div>
    <div class="box100">0</div>
    <div class="box100">100</div>
    <div class="box100">200</div>
    <div class="box100">300</div>
    <div class="box100">400</div>
    <div class="box100">500</div>
    <div class="box100">600</div>
    <div class="box100">700</div>
    <div class="box100">800</div>
    <div class="box100 wow animate__animated animate__fadeIn">900</div>
    <div class="box100">1000</div>
    <div class="box100">1100</div>
    <div class="box100">1200</div>
  </div>
</template>
<script>
export default 
  name: "home2",
  components: ,
  data() 
    return ;
  ,
  // watch: 
  // 异步加载
  //   xxxx() 
  //     this.$nextTick(() => 
  //       // 在dom渲染完后,再执行动画
  //       this.$wow.init();
  //     );
  //   ,
  // ,
  mounted() 
    this.$nextTick(() => 
      this.$wow.init();
    );
  ,
  methods: ,
  destroyed() ,
;
</script>

<style lang="scss" scoped>
.box100 
  height: 100px;
  background: #3a8ee6;
  border: 1px solid black;

</style>

方式二-局部引入

main.js

import animated from 'animate.css'
Vue.use(animated)

使用

//.vue文件

import  WOW  from 'wowjs'

//初始化wow.js
mounted()
var wow = new WOW(
	boxClass: 'wow',    //需要执行动画元素的Class
	animateClass: 'animated',    //animation.css动画的Class
	offset: 0,    //距离可视区域多少开始执行动画
	mobile: true,    //是否在移动设备执行动画
	live: true    //异步加载的内容是否有效
	)
	wow.init();




//属性
data-wow-duration:更改动画持续时间 data-wow-delay:动画开始前的延迟
data-wow-offset:开始动画的距离(与浏览器底部相关)
data-wow-iteration:动画的次数重复(无限次:infinite)

全量代码

<template>
  <div class="warp">
    <span>内容</span>
    <div class="wow animate__animated animate__fadeIn">900</div>
    <div class="wow animate__animated animate__fadeIn" data-wow-duration="2s">
      900
    </div>
    <div class="wow animate__animated animate__fadeIn" data-wow-delay="5s">
      900
    </div>
    <div style="height: 1200px"></div>
    <!--  添加 data-wow-offset="200"   效果:当元素距离可视区域200时开始执行动画(元素顶部到浏览器底部的距离) -->
    <div class="wow animate__animated animate__fadeIn" data-wow-offset="200">
      900
    </div>
    <div style="height: 1300px"></div>
    <div class="box100">0</div>
    <div class="box100">100</div>
    <div class="box100">200</div>
    <div class="box100">300</div>
    <div class="box100">400</div>
    <div class="box100">500</div>
    <div class="box100">600</div>
    <div class="box100">700</div>
    <div class="box100">800</div>
    <div class="box100 wow animate__animated animate__fadeIn">900</div>
    <div class="box100">1000</div>
    <div class="box100">1100</div>
    <div class="box100">1200</div>
  </div>
</template>
 
<script>
import  WOW  from "wowjs";
export default 
  components: ,
  data() 
    return ;
  ,
  computed: ,
  mounted() 
    this.$nextTick(() => 
      let wow = new WOW(
        boxClass: "wow", //需要执行动画元素的Class
        animateClass: "animated", //animation.css动画的Class
        offset: 0, //距离可视区域多少开始执行动画
        mobile: true, //是否在移动设备执行动画
        live: false, //异步加载的内容是否有效
      );
      wow.init();
    );
  ,
;
// 介绍
// data-wow-duration:更改动画持续时间 data-wow-delay:动画开始前的延迟
// data-wow-offset:开始动画的距离(与浏览器底部相关)
// data-wow-iteration:动画的次数重复(无限次:infinite)
</script>
<style lang="scss" scoped >
.warp 
  font-size: 30px;
  .box100 
    height: 100px;
    background: #3a8ee6;
    border: 1px solid black;
  

</style>
 

以上是关于Vue+wow.js+animate.css-实现页面滚动可视区域动画效果展示-案例的主要内容,如果未能解决你的问题,请参考以下文章

WOW.js和animate.css让页面滚动时显示动画

wow.js

WOW.js 使用教程

animate.css+wow.js页面滚动即时显示动画

wow加载动画

wow.js动画使用方法