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

求助:用CSS/JS或animeJS实现图片环形环绕及分散弹跳动画

环形旋转图片动画实现方案(基于animeJS)

基础布局与居中处理

先搞定容器居中,确保环形整体在页面中间:

<div class="ring-container">
  <!-- 图片将通过JS动态生成 -->
</div>
.ring-container {
  position: relative;
  width: 600px;
  height: 600px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
}

.ring-item {
  position: absolute;
  width: 80px;
  height: 80px;
  border-radius: 8px;
  object-fit: cover;
  /* 确保图片旋转时以自身中心为轴 */
  transform-origin: center center;
}

动态生成图片与环形分散布局

根据图片数量均分环形,同时添加随机偏移实现分散效果:

const container = document.querySelector('.ring-container');
const imgCount = 20; // 可在10-30之间调整
const ringRadius = 200; // 环形半径,根据需求调整

// 批量生成图片元素
for (let i = 0; i < imgCount; i++) {
  const img = document.createElement('img');
  img.src = `your-image-${i}.jpg`; // 替换为你的图片路径
  img.className = 'ring-item';
  container.appendChild(img);
}

// 计算每个图片的初始位置
const items = document.querySelectorAll('.ring-item');
items.forEach((item, index) => {
  // 基础角度:均分360度
  const baseAngle = (index / imgCount) * Math.PI * 2;
  // 随机角度偏移(±5度,避免完全规整)
  const angleOffset = (Math.random() - 0.5) * (Math.PI / 18);
  // 随机半径偏移(±15px,制造分散感)
  const radiusOffset = (Math.random() - 0.5) * 30;

  // 计算基于容器中心的偏移坐标
  const x = Math.cos(baseAngle + angleOffset) * (ringRadius + radiusOffset);
  const y = Math.sin(baseAngle + angleOffset) * (ringRadius + radiusOffset);

  item.style.transform = `translate(${x}px, ${y}px)`;
});

环形旋转与弹跳动画

用animeJS实现循环旋转和错落弹跳效果:

// 环形循环旋转动画
anime({
  targets: '.ring-item',
  rotate: '+=360', // 相对自身初始角度旋转一周
  duration: 15000, // 旋转周期,可调整
  easing: 'linear',
  loop: true,
  // 错开每个图片的旋转启动时间,保持环形结构
  delay: anime.stagger((index) => (index / imgCount) * 15000)
});

// 错落弹跳动画
anime({
  targets: '.ring-item',
  scale: [1, 1.1, 1],
  translateY: [0, -12, 0],
  duration: anime.stagger(2200, {from: 'random'}), // 随机错开弹跳时间
  easing: 'easeInOutQuad',
  loop: true
});

问题排查与解决

  • 仅单张图片动画:之前可能只给单个元素绑定了动画,现在用.ring-item选择器选中所有图片即可。
  • 位置偏移/不居中:确保容器是relative定位,图片的transform-origin设为自身中心,坐标计算基于容器中心偏移。
  • 工具选择:animeJS完全适配这个需求,不用更换工具,它的stagger功能能轻松实现错落动画。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:20:21