前段时间在做项目中遇到一个关于弹窗由小变大的动画,以前做这些动画时就用animate,只需要写个方法,然后把动画名称往里一扔就完事。但在小程序不知道怎么用。去官方文档找了找,看到官方提供一个API wx.createAnimation(OBJECT)试着把官方的demo复制下来在本地看看。在使用过程中总觉得比较别扭,很不顺手,可能是小菜还没找到正确的使用方法。总之就是不习惯。

小程序是支持css3中的animation属性的,因为官方自己也在使用。小菜就用最笨的方法来实现如何在小程序使用animation动画。在jq时代,$('id').addClass('test').removeClass('test');很方便的为某个标签添加类名,在小程序中就不能像jq那样简单完成,但是可以换个思路,在data中定义一个变量,这个变量就是用来存放类名的。然后小程序自动会绑定类名。

好了,不说废话了,看demo和学使用才是王道,其余都是废话。

1.demo截图

动画展示 选择动画名称 动画属性 动画接口

2.文件结构

/
|--assets    //静态资源
|    |-- image  //图片资源
|    |-- wxss  
|         |-- animation.wxss  //需要引入动画文件
|         |-- costom.wxss     //自己定义的动画属性
|--pages
|    |-- example   //属性演示
|    |-- index     //animation演示
|
|--utils
|   |-- animation.js  //需要引入js
|--app.js
|--app.json
|--app.wxss
|--LICENSE
|--project.config.json
|--README.md


3.使用

01.在wxml文件中


<view class="animition-warp">
    <view class="{{animatess}}">
        <view class="demo-text">anmition.css</view>
    </view>
</view>
<view style="text-align: center;">
    <view class="anew" catchtap="animate">Animate it</view>
</view>

02.引入animation.wxss

/**引入animation**/
@import "../../assets/wxss/animat.wxss";  
/**引入自定义css类**/
@import "../../assets/wxss/custom.wxss";

.animition-warp{
    padding: 100px 0 0 0;
}
.anew{
    display: inline-block;
    margin: 30px 0;
    padding: 10px 20px;
    color: #fff;
    border: 1px solid #A5DE37;
    border-radius: 100px;
    box-shadow: 0 7px 0 #8bc220, 0 8px 3px rgba(0, 0, 0, 0.3);
    background-color: #A5DE37;
}
.longtime{
    box-shadow: 0 2px 0 #8bc220, 0 2px 3px rgba(0, 0, 0, 1);
}
.demo-text{
    font-size: 50px;
    text-align: center;
    color: #f35626;
    background-image: -webkit-linear-gradient(92deg,#f35626,#feab3a);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    -webkit-animation: hue 60s infinite linear;
}
@-webkit-keyframes hue{
    from {
        -webkit-filter: hue-rotate(0deg);
    }
    to {
        -webkit-filter: hue-rotate(-360deg);
    }
}

03.引入animation.js文件

import { loadAnimation } from '../../utils/animation';
const anss = ' animated';
Page({
  data:{
    animatess:''   //变量名随意
  },
  animate:function(){
    let self = this;
    let currss = 'zoomIn' + anss;
    let an = new loadAnimation(self);
    an.add({animatess:currss}).clear({animatess:''});
  }
})

4.注意

这里唯一使用需要注意的地方就是动画执行的次数,如需要执行5次,定义一类名

/**css**/
.animated.cout5 {
    -webkit-animation-iteration-count:5;
    animation-iteration-count: 5;
}
/**js**/
let currss = 'zoomIn cout5' + anss;    
let an = new loadAnimation(self);
an.add({animatess:currss}).clear({animatess:''},5000);

上面有两个注意的地方,添加了count5,在clear中多了5000,意思是过5秒钟清除添加的类。

time = 次数 * 持续时间(默认1秒)