You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS用transform:translate做XY轴同时动画失效,期望实现击球下落效果

问题原因
  • 你定义的两个@keyframes都在修改transform属性,CSS动画规则中,多个动画同时修改同一个属性时,后声明的动画会覆盖前者的属性值,因此你的X轴平移动画实际没有生效,只有Y轴动画在运行。
  • 你没有为X轴动画设置匹配的缓动函数,默认的ease缓动不符合球类被击打后水平方向先快后慢的自然运动效果。
修复方案

方案1:保留transform实现(性能更优,走GPU加速)

直接把两个方向的平移合并到同一个transform规则里,不需要拆分两个动画:

.ball {
  position: absolute;
  left: 18%;
  bottom: 100px;
  width: 40px;
  height: 40px;
  background-color: cadetblue;
  border-radius: 50%;
  animation: fly-ball 2s cubic-bezier(0.17, 0.67, 0.6, 1);
}

@keyframes fly-ball {
  100% {
    transform: translate(300px, 100px);
  }
}
<div class="ball"></div>

方案2:完全匹配参考效果,用定位属性实现

直接修改left和bottom属性,和参考代码逻辑完全对齐:

.ball {
  position: absolute;
  left: 18%;
  bottom: 100px;
  width: 40px;
  height: 40px;
  background-color: cadetblue;
  border-radius: 50%;
  animation: fly-ball-x 2s cubic-bezier(0.17, 0.67, 0.6, 1), fly-ball-y 2s;
}

@keyframes fly-ball-x {
  100% {
    left: 300px;
  }
}

@keyframes fly-ball-y {
  100% {
    bottom: 0;
  }
}
<div class="ball"></div>

内容的提问来源于stack exchange,提问作者Radek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:39:02