手记

微信小程序动画两种实现方式

开发小程序,实现动画功能,有两种实现方式,下面来看看具体怎么做:

JS动画

利用小程序API提供的wx.createAnimation(OBJECT)实现,API中是这样说:创建一个动画实例animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。

wxml

<view class="animation">
  <view class="dis-flex">
    <view class='flex3' animation="{{lAnimate}}">{{start}}</view>
    <view class='flex1' bindtap="trigger">
      <em class='iconfont switch-icon'></em>
    </view> 
    <view class='flex3' animation="{{rAnimate}}">{{end}}</view>
  </view>
</view>

css

@font-face {
  font-family: 'iconfont';  /* project id 703892 */
  src: url('//at.alicdn.com/t/font_703892_u8zob8nchpf.eot');
  src: url('//at.alicdn.com/t/font_703892_u8zob8nchpf.eot?#iefix') format('embedded-opentype'),
  url('//at.alicdn.com/t/font_703892_u8zob8nchpf.woff') format('woff'),
  url('//at.alicdn.com/t/font_703892_u8zob8nchpf.ttf') format('truetype'),
  url('//at.alicdn.com/t/font_703892_u8zob8nchpf.svg#iconfont') format('svg');
}
.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.animation{
  margin-top: 20rpx;
  padding: 10rpx 30rpx;
}
.dis-flex{
    display: flex;
}

.flex1{
    flex: 1;
    text-align: center;
}
.flex3{
    flex: 3;
    text-align: center;
}
.switch-icon:before { 
  content: "\e8c8"; 
}

js

Page({
  data: {
    lAnimate: '',
    rAnimate: '',
    start: '北京',
    end: '深圳'
  },
  trigger() {
    let vm = this;
    let option = {
      duration: 100, // 动画执行时间
      timingFunction: 'ease-in' // 动画执行效果
    };
    var lanimation = wx.createAnimation(option); // 创建动画
    var ranimation = wx.createAnimation(option);
    // 起点
    lanimation.translateX(100);
    lanimation.opacity(0.1).step();
    // 终点
    ranimation.translateX(-100);
    ranimation.opacity(0.1).step();
    vm.setData({
      lAnimate: lanimation.export(),// 开始执行动画
      rAnimate: ranimation.export() // 开始执行动画
    })
    setTimeout(() => {
      // 起点
      lanimation.translateX(0);
      lanimation.opacity(1).step();
      // 终点
      ranimation.translateX(0);
      ranimation.opacity(1).step();
      var temp = vm.data.start;
      vm.setData({
        lAnimate: lanimation.export(),// 开始执行动画
        rAnimate: ranimation.export(),// 开始执行动画
        end: temp,
        start: vm.data.end
      })
    }, 100);
  }
})
CSS3动画

CSS3动画还是用animation来完成,需要注意的是只需要@-webkit-keyframes,不需要其他的,如@-moz-keyframes,运用会报错

@-webkit-keyframes lanimation
{
  from {left:px2rpx(0px);}
  to {left:px2rpx(140px);}
}

.start{
  animation lanimation 2.5s ease-in infinite
  animation-delay 0.6s
}
公告

以后每月5、15、25号更新原创文章,内容不限,喜欢小编的可以点击关注,也可在下方评论留言,你喜欢什么内容,小编根据大家喜欢的内容尝试更新

9人推荐
随时随地看视频
慕课网APP