我感觉严格的抛物线动画不能通过createAnimation实现,但是可以通过帧动画。

这是我之前写的抛物线组件:

ts:

Component({

data: {

left: 0,

top: 0,

hidden: true,

},

timer: 0,

detached() {

this.cancel();

},

pageLifetimes: {

hide() {

this.cancel();

},

},

methods: {

animate(options: IOptions & { onEnd: () => void }) {

const { onEnd } = options;

this.cancel(false);

this.setData({

left: options.start.x,

top: options.start.y,

hidden: false,

});

parabolaAnimate(options, ({ x, y }, timer) => {

this.setData({ left: x, top: y });

this.timer = timer;

if (timer === 0) {

this.setData({ hidden: true });

if (typeof onEnd === 'function') {

onEnd();

}

}

});

},

cancel(hidden = true) {

if (this.timer) {

clearInterval(this.timer);

this.timer = 0;

}

if (hidden) {

this.setData({ hidden: true });

}

},

},

});

interface IOptions {

start: { x: number; y: number };

end: { x: number; y: number };

topY: number;

gforce?: number;

frameDuration?: number;

}

function parabolaAnimate(

options: IOptions,

callback: (ponit: { x: number; y: number }, timer: number) => void

) {

const { start, end, topY, gforce = 2000, frameDuration = 10 } = options;

const tStartToTop = Math.sqrt((Math.abs(topY - start.y) * 2) / gforce);

const tTopToEnd = Math.sqrt((Math.abs(topY - end.y) * 2) / gforce);

const tFrame = frameDuration / 1000;

let tRest = tStartToTop + tTopToEnd;

let vx = (end.x - start.x) / (tStartToTop + tTopToEnd);

let vy = -gforce * tStartToTop;

let startX = start.x;

let startY = start.y;

let timer = setInterval(() => {

const ponit = {

x: startX + vx * tFrame,

y: startY + vy * tFrame + (gforce * tFrame * tFrame) / 2,

};

vy = vy + gforce * tFrame;

tRest = tRest - tFrame;

startX = ponit.x;

startY = ponit.y;

if (tRest <= 0) {

clearInterval(timer);

timer = 0;

}

callback(ponit, timer);

}, frameDuration);

}

wxml:

调用:

Page({

onReady() {

this.parabolaBall = this.selectComponent("#parabola-ball");

this.systemInfo = wx.getSystemInfoSync();

},

animateBall(e) {

const { screenHeight, screenWidth } = this.systemInfo;

const { clientX, clientY } = e.touches[0];

const start = {

x: clientX,

y: clientY

};

this.parabolaBall.animate({

start,

end: {

x: screenWidth * 0.62,

y: screenHeight + 30

},

topY: clientY + 50

});

}

});

备注:重点在于抛物线函数parabolaAnimate的算法,其中起点坐标,终点坐标,顶点y坐标,重力加速度值是决定抛物线轨迹的必须要素。

android 购物车抛物线,添加到购物车抛物线动画相关推荐

  1. Android把商品添加到购物车的动画效果(贝塞尔曲线)

    当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,具体代码如下: 实现效果如图: 思路: 确定动画的起终点 在起终点之间使用二次贝塞尔曲线填充起终点之间的点的 ...

  2. Android之实现京东底部添加到购物车的效果

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50992567 本文出自:[顾林海的博客] ##前言 美好的双休日快要结 ...

  3. js添加到购物车动画效果实现

    方法一: 用js控制购车的的位置实现 原理解析: 通过js动态生成一个过度元素(就是一个可以移动的小球),并控制该元素的位置移动,从点击按钮dom元素移动到购物车的dom元素,实现添加到购物车的动态效 ...

  4. 小程序实现购物车商品飞入效果-贝塞尔曲线动画

    看过很多文章,几乎都是JS计算,控制三个点实现,对我菜鸟的我来说太难了,我这边是用来position+CSS3 cubic-bezier() 函数,既然是分享,我会尽量贴完整代码,害,有的博客,没头没 ...

  5. jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果

    HTML 首先载入jQuery库文件和jquery.fly.min.js插件. 接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片.价格.名称以及加入购 ...

  6. Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能。(ArrayList,SQLite)

    Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能.(ArrayList,SQLite) 布局(activity_main.xml): <?xml v ...

  7. Vue商品添加到购物车

    用Vue实现把商品添加到购物车然后计算购物车里商品总金额. 功能分析: 1.商品添加到购物车 2.购物车显示商品的名称数量价格 3.计算购物车商品的总金额 4.删除购物车商品 效果演示 原始样式 添加 ...

  8. 案例:实现在购物车中添加商品和删除购物车中指定商品的功能

    一.向购物车中添加商品 1.1.创建AddCartServlet public class AddCartServlet extends HttpServlet {public void doGet( ...

  9. android购物车栏,Android怎么实现二级列表购物车功能

    Android怎么实现二级列表购物车功能 发布时间:2021-04-16 12:45:40 来源:亿速云 阅读:61 作者:小新 小编给大家分享一下Android怎么实现二级列表购物车功能,希望大家阅 ...

最新文章

  1. 测量音叉153kHz谐振器的幅频特性
  2. XXL-Job分布式任务调度
  3. [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
  4. php 什么时候销毁对象,什么决定什么时候在PHP中销毁类对象?
  5. 错误 open too many files
  6. 软件工程第一次结对编程
  7. 好工具推荐系列:Feem和Send-anywhere,跨平台局域网传输工具,文件共享工具
  8. 【小睿精选·第七期】基于STM32的DIY蓝牙机械键盘
  9. 论文阅读:(arXiv 2021)Beyond Periodicity: Towards a Unifying Framework for Activations in Coordinate-MLP
  10. Heart Rate Variability Analysis with the HRV Toolkit: Basic Time and Frequency Domain Measures
  11. jsp表单数据禁止复制
  12. PAT基础-厘米换算英尺英寸 JAVA
  13. STM32F407——矩阵键盘
  14. Frida在windows上的玩法
  15. 搭建Wordpress Mu的插件和注意事项
  16. 2022-2028年中国嵌入式计算机系统行业发展现状调查及前景战略分析报告
  17. 西门子PLC中STL语言状态字
  18. ES6将对象中同一类相加
  19. m6000查看端口状态_M6000常用维护命令.doc
  20. 直播平台流媒体服务器搭建(Linux+Nginx+RTMP)

热门文章

  1. at指令获取网络连接类型_【新手】ESP8266模块 AT指令详解
  2. 招商局集团内部控制手册pdf_企业内部控制流程手册,全文22模块,内容很全面,可直接打印使用...
  3. mysql 加号的作用_MySQL学习笔记(一)
  4. pandas concat_pandas合并几百个csv只需要一分钟?(含代码,拿去即可用)
  5. 【spring boot】url中传递session id
  6. java comparable接口作用_Java Comparable 接口
  7. django mysql connector,MySQL Connector / Python作为Django引擎?
  8. boost 递归锁_c++/boost互斥量与锁
  9. 层和 native_React-Native与小程序的底层框架比较
  10. python的图表库_python 图表库