写一个Javascript方法给定起点和终点坐标实现Dom元素抛物线移动动画要求元素要先向上抛出再落下
下面是一个实现此功能的Javascript方法:
function animateParabola(startX, startY, endX, endY, duration, element) {
// 计算抛物线的参数
const a = (startY - endY) / ((startX - endX) ** 2);
const b = -2 * a * startX;
const c = startY - a * startX ** 2;
// 计算总的移动距离和移动的总时间
const distance = Math.sqrt((startX - endX) ** 2 + (startY - endY) ** 2);
const speed = distance / duration;
// 记录开始时间
const startTime = new Date().getTime();
// 定义动画函数
function animate() {
// 计算已经过去的时间
const currentTime = new Date().getTime();
const elapsedTime = currentTime - startTime;
// 计算当前位置
const currentX = startX + speed * elapsedTime * Math.cos(Math.atan(a));
const currentY = a * currentX ** 2 + b * currentX + c;
// 更新元素位置
element.style.left = currentX + 'px';
element.style.top = currentY + 'px';
// 如果还没有到达终点,继续动画
if (currentX < endX) {
requestAnimationFrame(animate);
} else {
// 到达终点后,再做一次反向运动
const middleX = (startX + endX) / 2;
const middleY = startY - distance / 4;
animateParabola(endX, endY, middleX, middleY, duration / 2, element);
}
}
// 开始动画
requestAnimationFrame(animate);
}
使用方法:
const element = document.getElementById('box');
animateParabola(0, 0, 200, 200, 1000, element);
其中,startX
和startY
是起点的坐标,endX
和endY
是终点的坐标,duration
是动画的总时间(毫秒),element
是要移动的DOM元素。在示例中,元素会从左上角向右下角抛出,然后再落回原位。
原文地址: http://www.cveoy.top/t/topic/42Z 著作权归作者所有。请勿转载和采集!