JS抛物线动画实例制作


Posted in Javascript onFebruary 24, 2018

在做无人便利小程序的项目中,某一天产品说要像某产商产品学习,给添加购物车增加抛物线小球动画。好吧,产品你最大,做!

先给大家看下效果图

JS抛物线动画实例制作

分析

这种不固定起始位置的动画,自然不能用 gif 图,所以只能用原生代码实现

那我们有什么工具来实现动画呢?

小程序提供了 JS API createAnimation 来创建动画

CSS animation

工具有了,我们再看一下什么是抛物线。

这里我们只讨论水平抛物线,水平抛物线从数学原理上来说就是【水平匀速、垂直加速的运动】,转换成代码层面就是在动画效果 timingFunction 中,水平动画采用 linear ,垂直动画采用 ease-in

所以我们需要把这个抛物线动画分解成 两个 同时 进行但 不同动画效果 的动画。

实现

小程序的实现

JS:

cartAnimation(x, y) { // x y 为手指点击的坐标,即球的起始坐标
  let self = this,
    cartY = app.globalData.winHeight - 50, // 结束位置(购物车图片)纵坐标
    cartX = 50, // 结束位置(购物车图片)的横坐标
    animationX = flyX(cartX, x), // 创建球的横向动画
    animationY = flyY(cartY, y), // 创建球的纵向动画
    this.setData({
      ballX: x,
      ballY: y,
      showBall: true
    })
  setTimeoutES6(100).then(() => { // 100 秒延时,确保球已经到位并显示
    self.setData({
      animationX: animationX.export(),
      animationY: animationY.export(),
    })
    return setTimeoutES6(400) // 400 是球的抛物线动画时长
  }).then(() => { // 400 秒延时后隐藏球
    this.setData({
      showBall: false,
    })
  })
}

function setTimeoutES6(sec) { // Promise 化 setTimeout
  return new Promise((resolve, reject) => {
    setTimeout(() => {resolve()}, sec)
  })
}

function flyX(cartX, oriX) { // 水平动画
  let animation = wx.createAnimation({
    duration: 400,
    timingFunction: 'linear',
  })
  animation.left(cartX).step()
  return animation
}

function flyY(cartY, oriY) { // 垂直动画
  let animation = wx.createAnimation({
    duration: 400,
    timingFunction: 'ease-in',
  })
  animation.top(cartY).step()
  return animation
}

HTML:

<view animation="{{animationY}}" style="position:fixed;top:{{ballY}}px;" hidden="{{!showBall}}">
  <view class="ball" animation="{{animationX}}" style="position:fixed;left:{{ballX}}px;"></view>
</view>

据我所知,用 transform: transtate() 来实现的动画会比 top & left 性能更优,但尝试下来发现并不能做到理想的交互效果,期待后续继续研究吧

H5 的实现

// todo
Javascript 相关文章推荐
jQuery的强大选择器小结
Dec 27 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
Nov 11 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
裁剪字符串trim()自定义改进版
Apr 10 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
Dec 08 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
JS获取短信验证码倒计时的实现代码
May 22 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
JS实现的input选择图片本地预览功能示例
Aug 29 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
浅谈VUE监听窗口变化事件的问题
Feb 24 #Javascript
使用watch监听路由变化和watch监听对象的实例
Feb 24 #Javascript
vue watch监听对象及对应值的变化详解
Feb 24 #Javascript
解决Vue不能检测数组或对象变动的问题
Feb 24 #Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 #Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 #jQuery
vue cli webpack中使用sass的方法
Feb 24 #Javascript
You might like
在数据量大(超过10万)的情况下
2007/01/15 PHP
php仿discuz分页效果代码
2008/10/02 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
JS获取url链接字符串 location.href
2013/12/23 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Python urlopen 使用小示例
2008/09/06 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
以下的初始化有什么区别
2013/12/16 面试题
药剂专业求职信
2014/06/20 职场文书
2014年民政工作总结
2014/11/26 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
企业愿景口号
2015/12/25 职场文书