X-ANIMATE

通过屏幕滚动实现执行动画,支持延时动画、控制动画执行时间、执行偏移量、生命周期回调、动画组,完美支持Animate.css。

安装

  • 通过 npm or yarn 安装:
npm install animate.css x-animate --save

引用

  • 通过包管理器安装:
// javascript
import 'animate.css'
import XAnimate from 'x-animate'
const xAnimate = new XAnimate();
xAnimate.init();

本项目通过 rollup 使用 UMD 格式打包,支持 AMD、CommonJS、script 标签引入,下载源码

起步

为至少一个 DOM 添加 animate 属性,并赋值一个动画名称,例如:

<!-- html -->
<div animate="bounceInLeft"></div>

单元素动画

只对单个元素生效的动画,当滚动到它的相应位置就会被执行:

<!-- html -->
<div animate="[animate-name]" 
     delay="1000" 
     duration="1000" 
     offset="100" 
     animateEnter="animateEnterFn" 
     animateLeave="animateLeaveFn"
></div>

animate*

none <String>

参考 animate.css 动画名,或参考自定义动画。

delay

0(ms) <Number>

延时:当屏幕滚动到对应位置时,延时结束执行动画。

duration

1000(ms) <Number>

持续时间:动画执行的持续时间,数值越大动画越慢。

offset

0(px) <Number>

偏移量:以屏幕底部为轴,默认滚动到某一元素已显示一半高度时执行动画。偏移量为正数,则需多滚动相应的距离;偏移量为负值,则会提前相应距离执行动画。

animateEnter(item)

none <Function>

生命周期函数:当某个元素动画开始时执行函数。

animateLeave(item)

none <Function>

生命周期函数:当某个元素动画结束时执行函数。

动画组

当滚动到某个区域需要它里面的子元素做连续动画时(例如为地图标记点做连续动画):

<!-- html -->
<div animate-group>
  <div animateItem="[animate-name]"></div>
</div>

animate-group*

为一个动画组的父元素添加此属性。

animateItem*

动画名,同时子元素支持单元素的所有属性。

绑定生命周期函数

在需要触发的元素上增加属性 animate-enter (动画前)或 animate-leave (动画后),值为定义在 methods 中的函数名。

<!-- html -->
<div animate-enter="animateEnter" animate-leave="animateLeave"></div>

将需要执行的函数定义在 methods 中:

// javascript
let xAnimate = new XAnimate({
  methods: {
    animateEnterFn(item) {
      console.log('animateEnter', item);
    },
    animateLeaveFn(item) {
      console.log('animateLeave', item);
    }
  }
});

自定义动画

使用自定义的动画,例如新定义 newAnimate 动画:

/* css */
@keyframes newAnimate {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.newAnimate {
  animation-name: newAnimate;
}
<!-- html -->
<div animate="newAnimate"></div>

其他配置

// javascript
const xAnimate = new XAnimate({
  // 默认值'animate',对应<div animate=""></div>,防止与其他插件命名冲突
  name: 'animate',
  // 默认值'delay',对应<div delay=""></div>,防止与其他插件命名冲突
  delay: 'delay',
  // 默认值'duration',对应<div duration=""></div>,防止与其他插件命名冲突
  duration: 'duration'
});