左边敲打IDE!右边出现了一个世界!!!

简介: 以转盘组件为例,一起揭开Animation在微信小程序中的神秘面纱。

Animation


有请猪角Animation 微信提供给我开发者一个开发动画的类,借助它我们就可以画转盘。


第一步:wx.createAnimation方法用于创建Animation类并且设定基础属性。


//创建动画
      let animationRun = wx.createAnimation({
        duration: 6,
        timingFunction: 'ease',
        delay:10,
        transformOrigin:"'50% 50% 0'"
      })


看到上面的代码你是否有种似曾相识的感觉,想想,再想想,给你点提示css3。


css3 属性transition语法


transition: property duration timing-function delay;


于是乎我们似乎得到一个结论:当使用wx.createAnimation创建一个动画时,本质就是在构建css3动画字符串。


上面创建动画的代码就转化成


// css动画字符串
<style>
transition: 6000ms ease 10000ms;
transition-property: transform;
transform-origin: 50% 50% 0;
-webkit-transition:  6000ms ease 10000ms;
-webkit-transition-property: transform;
-webkit-transform-origin: 50% 50% 0;
</style>


第二步:Animation.rotate 方法用于设定转盘旋转的角度。


let runDeg = 90
animationRun.rotate(runDeg).step();


上面代码会在css动画字符串中增加:


transform:rotate(90deg);
-ms-transform:rotate(90deg);  /* IE 9 */
-moz-transform:rotate(90deg);   /* Firefox */
-webkit-transform:rotate(90deg); /* Safari 和 Chrome */
-o-transform:rotate(90deg);   /* Opera */


变成完整的css样式


<style>
transition: 6000ms ease 10000ms;
transition-property: transform;
transform-origin: 50% 50% 0;
-webkit-transition:  6000ms ease 10000ms;
-webkit-transition-property: transform;
-webkit-transform-origin: 50% 50% 0;
transform:rotate(90deg);
-ms-transform:rotate(90deg);  /* IE 9 */
-moz-transform:rotate(90deg);   /* Firefox */
-webkit-transform:rotate(90deg); /* Safari 和 Chrome */
-o-transform:rotate(90deg);   /* Opera */
</style>


第三步:Animation.step 方法用于结束一组动画,以便开始下一组动画。


animationRun.rotate(runDeg).step()


该方法会将多个动画样式合并。


<style>
animation1;
animation2;
animation3;
</style>


第四步:Animation.export 方法用于导出动画队列。


this.setData({
        animationData: animationRun.export(),
        btnDisabled: 'disabled'
      });


此时本质就是把完整的css3样式赋值到对应的标签style内,打开调试查看wxml。


官方解释:导出动画队列。export 方法每次调用后会清掉之前的动画操作。


但是实际操作发现,在第三步时如果将animationRun赋值可以到达同样的效果,也就是说调用step方法时已经将动画导出。(当然这些是作者结合实践加大胆的猜测,并未得到微信的答复)并且发现export方法也存在问题,并不是官方所说的会清掉之前的动画。查看Wxml会发现样式依旧存在。应该是微信小程序的一个bug,这点也给后续操作带来了一些列的问题。例如动画样式已经是内联样式,自定义样式不易去覆盖。(我们同时先微信团队提出了疑问。)


当我们使用Animation后,如果希望自定义一些css3样式可能会遇到问题,目前建议自己代码清除一些样式。


总结


Animation 本质就是对css3动画样式的基本封装便于在js中灵活控制。


当你看到一大堆简单但是却需要记忆的样式代码时,尝试通过封装之道,让代码变的更加优美。


文章结尾奉献一个转盘组件。完整代码已经附上,喜欢的朋友可以自行引用。


使用场景


抽奖


点击查看源码


相关文章
IDEA中返回上一步和下一步快捷键失效【Ctrl+Alt+左箭头】
这篇文章提供了解决IntelliJ IDEA中"返回上一步"和"下一步"快捷键失效的方法,通常是因为与其他软件的快捷键发生冲突,解决方法是更改快捷键设置。
|
4月前
|
编解码 开发工具 Python
Intellij IDEA、 Pycharm 格式化换行,竖线修改 最大 分隔 线
Intellij IDEA、 Pycharm 格式化换行,竖线修改 最大 分隔 线
60 1
解决 010Edittor 复制右边到左边的问题
解决 010Edittor 复制右边到左边的问题
192 1
IDEA、webstorm设置编辑器恶心的竖线位置、隐藏竖线(参考线),然后代码自动换行
IDEA、webstorm设置编辑器恶心的竖线位置、隐藏竖线(参考线),然后代码自动换行
|
人工智能
IDEA中遍历数组快捷键
IDEA中遍历数组快捷键
|
XML Java 程序员
【IDEA】快捷键注释位置不放置在首行,放置在当前行第一个字符攻略
【IDEA】快捷键注释位置不放置在首行,放置在当前行第一个字符攻略 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝
418 0
【IDEA】快捷键注释位置不放置在首行,放置在当前行第一个字符攻略
IDEA回到光标的上一次位置
IDEA回到光标的上一次位置
292 0
IDEA回到光标的上一次位置
|
IDE 开发工具 C语言
使用Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法
使用Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法
|
算法 Java 程序员
IDEA中“\t“空格显示不正确问题解决
IDEA中“\t“空格显示不正确问题解决
IDEA中“\t“空格显示不正确问题解决
|
Android开发 Windows
58如何调出eclipse左边文件栏
58如何调出eclipse左边文件栏
148 0
58如何调出eclipse左边文件栏
下一篇
DataWorks