如何利用Vue3/TS/wow.js/Animate.css完成任意重复动画

2024年1月16日
993 次阅读
admin

1.前言

为了让页面滚动更有趣得自己手写CSS过渡动画,但是自己手写CSS过渡太麻烦。大佬制作的wow.js+Animate.css就解决了这个问题。

2.安装信息

我使用了对应的模块包,我的安装模块的版本如下。请按照我的版本进行安装。否则可能会有函数用法区别导致无法使用。

{
  "name": "blogvuets",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "serve": "vite",
    "build": "vite build",
    "test:unit": "vitest",
    "dev": "vite",
    "preview": "vite preview",
    "lint": "vue-cli-service lint",
    "publish": "vue-cli-service build && vue-cli-service build --mode test",
    "test": "vue-cli-service build --mode test && npm run  serve -s dist",
    "production": "vue-cli-service build --mode production && npm run serve -s dist"
  },
  "dependencies": {
    "@unhead/vue": "^1.8.9",
    "@vitejs/plugin-vue": "^4.3.4",
    "animate.css": "^4.1.1",
    "axios": "^1.5.0",
    "core-js": "^3.8.3",
    "element-plus": "^2.4.0",
    "fingerprintjs2": "^2.1.4",
    "grecaptcha": "^1.0.3",
    "jsonwebtoken": "^9.0.2",
    "lodash": "^4.17.21",
    "markdown-it": "^13.0.1",
    "os": "^0.1.2",
    "typeit": "^8.7.1",
    "undraw-ui": "^1.0.2",
    "unplugin-auto-import": "^0.16.6",
    "unplugin-vue-components": "^0.25.2",
    "vite": "^4.4.9",
    "vue": "^3.2.25",
    "vue-jwt-decode": "^0.1.0",
    "vue-recaptcha": "^3.0.0-alpha.2",
    "vue-router": "^4.0.13",
    "vue3-recaptcha2": "^1.8.0",
    "vuex": "^4.0.0",
    "vuex-persistedstate": "^4.1.0",
    "wow.js": "^1.2.2",
  },
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^5.4.0",
    "@typescript-eslint/parser": "^5.4.0",
    "@vue/cli-plugin-babel": "~5.0.0",
    "@vue/cli-plugin-eslint": "~5.0.0",
    "@vue/cli-plugin-router": "~5.0.0",
    "@vue/cli-plugin-typescript": "~5.0.0",
    "@vue/cli-plugin-vuex": "~5.0.0",
    "@vue/cli-service": "~5.0.0",
    "@vue/eslint-config-typescript": "^9.1.0",
    "eslint": "^7.32.0",
    "eslint-plugin-vue": "^8.0.3",
    "typescript": "~4.5.5"
  }
}

请检查下面的包是否是对应版本。下面就以我的版本进行安装

  • wow.js 用来重复输出动画
  • Animate.css 更多输出CSS动画

main.ts设置

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import UndrawUi from 'undraw-ui'
import 'undraw-ui/dist/style.css'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import { createHead } from '@unhead/vue'
//请按照下面的方法引入CSS,否则可能无法使用
import "animate.css"
//不加这个引入的话可能会导致其他动画无法使用
import 'animate.css/animate.compat.css'

const head = createHead()
createApp(App).use(store).use(router).use(UndrawUi).use(ElementPlus).use(head).mount('#app')

3.其他页面使用动画

随后。我们可以在任何页面中引入模块。

<script setup >
onMounted(() => {
  const wow = new WOW({
      boxClass: 'wow',
      animateClass: 'animated',//这里非常重要请按照示例填写
      offset: 0,
      mobile: true,
      live: true,
      scrollContainer: null,
      resetAnimation: true,
      callback:     function(box) {
        //这个地方可以写动画完成的回调
    },
  })
  wow.init();
  loadData(currentPage.value);
});
<script>

<el-card class="wow animate__bounce bounceInDown box-card"  data-wow-duration="4s"  shadow="hover" id="main-boxcard"  style="display: flex; flex-direction: column; height: 99%;"></el-card>

//注意此处一定要引入这个css否则可能无法使用
<style src="wow.js/css/libs/animate.css"></style>

各个参数的含义

  • boxClass:当用户滚动时显示隐藏框的类名。
  • animateClass:触发 CSS 动画的类名(animate.css 库默认为“animated”)
  • offset:定义浏览器视口底部与隐藏框顶部之间的距离。当用户滚动并到达此距离时,隐藏框就会显示出来。
  • mobile:在移动设备上打开/关闭 wow.js。
  • live:不断检查页面上是否有新的 WOW 元素。

4.其他配置

wow高级配置项
  • data-wow-duration:更改动画的持续时间
  • data-wow-delay:动画开始之前的延迟
  • data-wow-offset:启动动画的距离(与浏览器底部有关)
  • data-wow-iteration:动画的次数重复
Animate.css动画
fade: {
	title: '淡入淡出',
	fadeIn: '淡入',
	fadeInDown: '向下淡入',
	fadeInDownBig: '向下快速淡入',
	fadeInLeft: '向右淡入',
	fadeInLeftBig: '向右快速淡入',
	fadeInRight: '向左淡入',
	fadeInRightBig: '向左快速淡入',
	fadeInUp: '向上淡入',
	fadeInUpBig: '向上快速淡入',
	fadeOut: '淡出',
	fadeOutDown: '向下淡出',
	fadeOutDownBig: '向下快速淡出',
	fadeOutLeft: '向左淡出',
	fadeOutLeftBig: '向左快速淡出',
	adeOutRight: '向右淡出',
	fadeOutRightBig: '向右快速淡出',
	fadeOutUp: '向上淡出',
	fadeOutUpBig: '向上快速淡出'
}, bounce: {
	title: '弹跳类',
	bounceIn: '弹跳进入',
	bounceInDown: '向下弹跳进入',
	bounceInLeft: '向右弹跳进入',
	bounceInRight: '向左弹跳进入',
	bounceInUp: '向上弹跳进入',
	bounceOut: '弹跳退出',
	bounceOutDown: '向下弹跳退出',
	bounceOutLeft: '向左弹跳退出',
	bounceOutRight: '向右弹跳退出',
	bounceOutUp: '向上弹跳退出'
}, zoom: {
	title: '缩放类',
	zoomIn: '放大进入',
	zoomInDown: '向下放大进入',
	zoomInLeft: '向右放大进入',
	zoomInRight: '向左放大进入',
	zoomInUp: '向上放大进入',
	zoomOut: '缩小退出',
	zoomOutDown: '向下缩小退出',
	zoomOutLeft: '向左缩小退出',
	zoomOutRight: '向右缩小退出',
	zoomOutUp: '向上缩小退出'
}, rotate: {
	title: '旋转类',
	rotateIn: '顺时针旋转进入',
	rotateInDownLeft: '从左往下旋入',
	rotateInDownRight: '从右往下旋入',
	rotateInUpLeft: '从左往上旋入',
	rotateInUpRight: '从右往上旋入',
	rotateOut: '顺时针旋转退出',
	rotateOutDownLeft: '向左下旋出',
	rotateOutDownRight: '向右下旋出',
	rotateOutUpLeft: '向左上旋出',
	rotateOutUpRight: '向右上旋出'
}, flip: {
	title: '翻转类',
	flipInX: '水平翻转进入',
	flipInY: '垂直翻转进入',
	flipOutX: '水平翻转退出',
	flipOutY: '垂直翻转退出'
}, strong: {
	title: '强调类',
	bounce: '弹跳',
	flash: '闪烁',
	pulse: '脉冲',
	rubberBand: '橡皮筋',
	shake: '左右弱晃动',
	swing: '上下摆动',
	tada: '缩放摆动',
	wobble: '左右强晃动',
	jello: '拉伸抖动'
}

5.结尾

更多的详细用法可以查看github首页。
wow仓库
animate.css仓库

评论区

0 / 500
* 为必填项