android 购物车抛物线,添加到购物车抛物线动画
我感觉严格的抛物线动画不能通过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 购物车抛物线,添加到购物车抛物线动画相关推荐
- Android把商品添加到购物车的动画效果(贝塞尔曲线)
当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,具体代码如下: 实现效果如图: 思路: 确定动画的起终点 在起终点之间使用二次贝塞尔曲线填充起终点之间的点的 ...
- Android之实现京东底部添加到购物车的效果
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50992567 本文出自:[顾林海的博客] ##前言 美好的双休日快要结 ...
- js添加到购物车动画效果实现
方法一: 用js控制购车的的位置实现 原理解析: 通过js动态生成一个过度元素(就是一个可以移动的小球),并控制该元素的位置移动,从点击按钮dom元素移动到购物车的dom元素,实现添加到购物车的动态效 ...
- 小程序实现购物车商品飞入效果-贝塞尔曲线动画
看过很多文章,几乎都是JS计算,控制三个点实现,对我菜鸟的我来说太难了,我这边是用来position+CSS3 cubic-bezier() 函数,既然是分享,我会尽量贴完整代码,害,有的博客,没头没 ...
- jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果
HTML 首先载入jQuery库文件和jquery.fly.min.js插件. 接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片.价格.名称以及加入购 ...
- Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能。(ArrayList,SQLite)
Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能.(ArrayList,SQLite) 布局(activity_main.xml): <?xml v ...
- Vue商品添加到购物车
用Vue实现把商品添加到购物车然后计算购物车里商品总金额. 功能分析: 1.商品添加到购物车 2.购物车显示商品的名称数量价格 3.计算购物车商品的总金额 4.删除购物车商品 效果演示 原始样式 添加 ...
- 案例:实现在购物车中添加商品和删除购物车中指定商品的功能
一.向购物车中添加商品 1.1.创建AddCartServlet public class AddCartServlet extends HttpServlet {public void doGet( ...
- android购物车栏,Android怎么实现二级列表购物车功能
Android怎么实现二级列表购物车功能 发布时间:2021-04-16 12:45:40 来源:亿速云 阅读:61 作者:小新 小编给大家分享一下Android怎么实现二级列表购物车功能,希望大家阅 ...
最新文章
- 测量音叉153kHz谐振器的幅频特性
- XXL-Job分布式任务调度
- [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
- php 什么时候销毁对象,什么决定什么时候在PHP中销毁类对象?
- 错误 open too many files
- 软件工程第一次结对编程
- 好工具推荐系列:Feem和Send-anywhere,跨平台局域网传输工具,文件共享工具
- 【小睿精选·第七期】基于STM32的DIY蓝牙机械键盘
- 论文阅读:(arXiv 2021)Beyond Periodicity: Towards a Unifying Framework for Activations in Coordinate-MLP
- Heart Rate Variability Analysis with the HRV Toolkit: Basic Time and Frequency Domain Measures
- jsp表单数据禁止复制
- PAT基础-厘米换算英尺英寸 JAVA
- STM32F407——矩阵键盘
- Frida在windows上的玩法
- 搭建Wordpress Mu的插件和注意事项
- 2022-2028年中国嵌入式计算机系统行业发展现状调查及前景战略分析报告
- 西门子PLC中STL语言状态字
- ES6将对象中同一类相加
- m6000查看端口状态_M6000常用维护命令.doc
- 直播平台流媒体服务器搭建(Linux+Nginx+RTMP)
热门文章
- at指令获取网络连接类型_【新手】ESP8266模块 AT指令详解
- 招商局集团内部控制手册pdf_企业内部控制流程手册,全文22模块,内容很全面,可直接打印使用...
- mysql 加号的作用_MySQL学习笔记(一)
- pandas concat_pandas合并几百个csv只需要一分钟?(含代码,拿去即可用)
- 【spring boot】url中传递session id
- java comparable接口作用_Java Comparable 接口
- django mysql connector,MySQL Connector / Python作为Django引擎?
- boost 递归锁_c++/boost互斥量与锁
- 层和 native_React-Native与小程序的底层框架比较
- python的图表库_python 图表库