wx小程序动画Animation和Css帧动画

html-css035

wx小程序动画Animation和Css帧动画,第1张

简单总结一下微信动画的实现及执行步骤。

实现方式官方文档是这样说的:

①创建一个动画实例 animation。

②调用实例的方法来描述动画。

③最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性 ...

注意:

前两步是定义一个动画并设置都要干什么,然后把这个设置好的“规则”扔给界面上的某个元素,让它按照这个规则执行。

当然如果有多个元素的animation="{{ani}}",也都会执行这个动画规则。

简单介绍一下例子中的几个参数和方法(其他的详见官方文档):

首先需要定义一套关键帧,关键帧的定义方式比较特殊,它使用了关键字@keyframes来定义动画。这里可以用from{}to{}或者用百分比充当时间点。具体格式为:

然后,在需要设置动画的相应的标签里,调用动画就可以了

比如需要给div添加动画效果:

div{

animation:1s 2s 动画名称 运动方式 动画执行的次数

}

详细分析:

首先 wxml 中 pupContent 初始化信息为高度为0 display: 为 noneclick 为 false

, click 这个来判断 display: 为 block 还是为 none (即: block 为换行显示, none 为不显示,把视图隐藏了) option 用来判断是否调用打开的动画,或者关闭的动画

第一次点击 click 变为 true option 变为 true 这时候 pupContent 的 display: 为 block 高度由动画变为 800rpx

第二次点击阴影部分 首先设置了 option 为 false option 为 false 的话先走的动画是 pupContent 由 800 的高度变为 0 .然后在设置click为false就隐藏掉了

通过按钮的click事件反复触发一个元素的css3动画,点击一次,动画效果就跑一次。

看码——

html:

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>测试页面</title>

<script id="jquery_183" type="text/javascript" src="//runjs.cn/js/sandbox/jquery/jquery-1.8.3.min.js"></script>

</head>

<body>

    <div id="testDiv01">

    </div>

    <button id="testBtn01">反复触发transition</button>

    <br>

    <div id="testDiv02">

    </div>

    <button id="testBtn02">反复触发animation</button>

</body>

javascript:

let [testDiv01,testDiv02,testBtn01,testBtn02]=[$('#testDiv01'),$('#testDiv02'),$('#testBtn01'),$('#testBtn02')]

testBtn01.on('click',function () {

        testDiv01.addClass('transi')

        let t = setTimeout(()=>{

            testDiv01.removeClass('transi')

            clearTimeout(t)

        },500)

})

testBtn02.on('click',function () {

        testDiv02.addClass('ani')

        let t = setTimeout(()=>{

            testDiv02.removeClass('ani')

            clearTimeout(t)

        },500)

})

css:

body {

  padding: 20px

}

.testDiv {

  width: 100px

  height: 100px

  border-radius: 50%

  background-color: #e0a718

}

.testDiv.ani {

  -webkit-animation: pop 200ms ease 0ms

          animation: pop 200ms ease 0ms

}

.testDiv.transi {

  -webkit-transform: scale(1.2)

          transform: scale(1.2)

  -webkit-transition: -webkit-transform 0.5s

  transition: -webkit-transform 0.5s

  transition: transform 0.5s

  transition: transform 0.5s, -webkit-transform 0.5s

}

.testBtn {

  margin-top: 20px

  height: 30px

  padding: 0px 10px

  border: 1px solid #CCCCCC

}

@-webkit-keyframes pop {

  0% {

    -webkit-transform: scale(0)

            transform: scale(0)

  }

  50% {

    -webkit-transform: scale(1.2)

            transform: scale(1.2)

  }

  100% {

    -webkit-transform: scale(1)

            transform: scale(1)

  }

}

@keyframes pop {

  0% {

    -webkit-transform: scale(0)

            transform: scale(0)

  }

  50% {

    -webkit-transform: scale(1.2)

            transform: scale(1.2)

  }

  100% {

    -webkit-transform: scale(1)

            transform: scale(1)

  }

}