Anime.js 在Vue3 Composition API/组合式API中的使用

2,665 阅读1分钟

项目里用需要用到亿点小动画,找了找发现Anime.js符合我要求,于是就耍耍咯。

开始的时候遇到了一点小问题,解决之后分享一下配置。

照惯例,先贴文档:

中文文档:
anime.js官网_免费、灵活的轻型JavaScript动画库 | animejs (fer-link.com)
英文文档:
animejs.com/
Github:
juliangarnier/anime: JavaScript animation engine (github.com)

文档里都给出了在传统html页面中的使用方式,但vue有那么一点点不同

安装

这里使用yarn,使用其他包管理器的可以自行替换

yarn add animejs
yarn add @types/animejs

注意,这里的**@types/animejs** 如果不引入的话,import时会提示找不到anime

引入

// 如果提示 “anime具有隐式any类型”,可以使用下一行的 “//@ts-ignore” 屏蔽
// @ts-ignore
import anime from 'animejs';

//如果不引入@types/animejs,则可以照着readme.md里这样写,但我没有测试过不知道行不行
//import anime from 'animejs/lib/anime.es.js';

使用

随手抄一个文档里的举例

anime({
  targets: '.dir-normal',
  translateX: 250,
  easing: 'easeInOutSine'
});

需要注意的是,以上代码不能直接在<script setup>中定义,需要定义在方法中,或者在onMounted中初始化,否则动画将不会生效。

一个正确的示例:

<template>
    <div class="bg"></div>
</template>

<script setup>
    // @ts-ignore
    import anime from 'animejs';
    let bgAnimate:anime.AnimeInstance
    onMounted(() => {
        bgAnimate = anime({
            targets: '.bg',
            translateX: 250,
            easing: 'easeInOutSine'
        });
    })
</script>

猜测可能是在setup阶段anime.js无法获取到dom导致的,因此同理,所有会在setup阶段执行的方法中也不能使用anime.js