Merge branches 'dev_item_bank', 'dev_new_shixunsrepository' and 'develop' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_new_shixunsrepository
commit
cfbb8acfed
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* 抛物线动画函数
|
||||||
|
* @param ballWrapper 小球的父容器
|
||||||
|
* @param origin 动画起点DOM
|
||||||
|
* @param target 动画目标DOM
|
||||||
|
* @param time 持续时间
|
||||||
|
* @param a 抛物线参数
|
||||||
|
* @param offset 动画尺寸
|
||||||
|
* @param callback 回调
|
||||||
|
*/
|
||||||
|
|
||||||
|
export function parabola(config) {
|
||||||
|
const {
|
||||||
|
ballWrapper,
|
||||||
|
origin,
|
||||||
|
target,
|
||||||
|
time = 1000,
|
||||||
|
a = 0.004,
|
||||||
|
callback,
|
||||||
|
finish,
|
||||||
|
offset = 0
|
||||||
|
} =
|
||||||
|
config || {};
|
||||||
|
const ballWrapperDimension = ballWrapper.getBoundingClientRect();
|
||||||
|
const originDimension = origin.getBoundingClientRect();
|
||||||
|
const targetDimension = target.getBoundingClientRect();
|
||||||
|
const x1 = originDimension.left + 0.5 * originDimension.width;
|
||||||
|
const y1 = originDimension.top + 0.5 * originDimension.height;
|
||||||
|
const x2 = targetDimension.left + 0.5 * targetDimension.width;
|
||||||
|
const y2 = targetDimension.top + 0.5 * targetDimension.height;
|
||||||
|
const diffx = x2 - x1;
|
||||||
|
const diffy = y2 - y1;
|
||||||
|
const speedx = diffx / time;
|
||||||
|
const b = (diffy - a * diffx * diffx) / diffx;
|
||||||
|
|
||||||
|
const refPoint_x = x1 - ballWrapperDimension.left - 0.5 * offset;
|
||||||
|
const refPoint_y = y1 - ballWrapperDimension.top - 0.5 * offset;
|
||||||
|
|
||||||
|
const start = Date.now();
|
||||||
|
const timer = setInterval(() => {
|
||||||
|
if (Date.now() - start > time) {
|
||||||
|
finish();
|
||||||
|
clearInterval(timer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const x = speedx * (Date.now() - start);
|
||||||
|
const y = a * x * x + b * x;
|
||||||
|
callback && callback(refPoint_x + x, refPoint_y + y);
|
||||||
|
}, 15);
|
||||||
|
}
|
Loading…
Reference in new issue