滴滴作为第一批的小程序开发者我们也大量地用到了动画积累了一些经验SEO排名服务积累了一些经验由于市面上的小程序动画案例很少我们也分享一部分我们做过的案例:
首先用 wx.createAnimation(OBJECT) 创建一个动画实例OBJECT 里的参数是设置动画 duration、timingFunction、delay、transformOrigin;然后通过 export 方法将动画实例输出并 setData 给组件 data{} 里的 animation 属性。
小程序官方动画 API 文档的最下面的 bug&tip :
在小程序动画文档里的 wx.creatAnimation(OBJECT) 这个方法提供的参数没有类似 css3 animation-iteration-count 这样的参数。
接来就说说下面的小动画案例:
如上图我们要实现小圆点沿着圆圈轨迹运动的小动画。
WXML:
两个 view 标签一个是路径圆圈圆圈可以用背景图来做也可以用 border-radius 来实现;一个是圆点。
<view class='animation-box'>
<view class = 'time-crl-path'></view>
<view class = 'crl-dot' animation='{{dotAnData}}'></view>
</view>
WXSS:
基本设置定位这里只放宽高。
.animation-box{
width: 176px;
height:176px;
}
.time-crl-path {
width: 176px;
height: 176px;
......
}
.crl-dot {
width: 9px;
height:9px;
......
}
. JS:
transformOrigin 这个参数所设置的是小圆点旋转时的原点默认是元素中心下面设置的就是路径圆圈的中心具体参数需要根据路径圆圈不来算。
Page({
data: {
dotAnData: {}
},
onShow: function(){
var i = 0
var dotAnData =wx.createAnimation({
duration: 1000,
transformOrigin: '4px 91px'
})
dotAnFun =setInterval(function() {
dotAnData.rotate(6 * (++i)).step()
that.setData({
dotAnData: dotAnData.export()
})
}.bind(that), 1000)
}
})
从上面的代码可以看出是使用 setInterval() 解决了文章开头的两项注意事项。
那么为什么不执行 rotate(360) 或者 rotate(180) ?
这就要注意官方文档的 rotate(deg) 的 deg 的取值范围 -180 ~ 180从原点顺时针旋转一个 deg。还有就是 rotate animation 在运动角度幅度较大的情况下轨迹会有偏离就是说在正常设置的 transformOrigin 的情况下圆点运动轨迹会有偏离。
所以上面的小动画案例就是把它拆分定义 deg 为 6 作基本增加量 ++i 累加这样在正常的 transformOrigin 下整个动画就是由每个小动画 rotate(6) 组成的。
目前小程序动画对于动画效果还是有限制的404错误页面这样在正常的 transformOrigin 下整个动画就是由每个小动画 rotate(6) 组成的。