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

如何实现红色从圆周起点出发持续填充行进至原点的循环动画

实现圆周填充动画的方案

下面提供两种实用的实现方式,分别适配不同场景需求:

方法一:CSS 锥形渐变动画

这种方式代码简洁,无需依赖JS,适合快速实现基础的圆周填充效果。

实现代码

<div class="circle"></div>
.circle {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  /* 初始状态:仅在顶部(A点)显示0范围的红色 */
  background: conic-gradient(red 0deg, transparent 0deg);
  /* 3秒线性完成填充,结束后保持最终状态 */
  animation: fill-circle 3s linear forwards;
}

@keyframes fill-circle {
  to {
    /* 最终状态:红色填充整个360度圆周 */
    background: conic-gradient(red 360deg, transparent 360deg);
  }
}

自定义起点调整

如果A点不在顶部而是其他位置(比如右侧),只需调整渐变的起始角度:

/* 起点为右侧的初始样式 */
background: conic-gradient(red 90deg, transparent 90deg);

/* 对应动画终点角度:90+360=450deg */
@keyframes fill-circle {
  to {
    background: conic-gradient(red 450deg, transparent 450deg);
  }
}

方法二:Canvas 绘制动画

这种方式灵活性更高,可自定义填充速度、路径样式,适合需要复杂交互或视觉定制的场景。

实现代码

<canvas id="circleCanvas" width="200" height="200"></canvas>
const canvas = document.getElementById('circleCanvas');
const ctx = canvas.getContext('2d');
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;
const radius = 90;
// 初始角度设为1.5π(对应顶部A点,右侧则设为0)
let currentAngle = Math.PI * 1.5;

function draw() {
  // 清空画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  
  // 绘制填充区域
  ctx.beginPath();
  ctx.moveTo(centerX, centerY); // 从圆心出发
  // 绘制从起点到当前角度的圆弧
  ctx.arc(centerX, centerY, radius, Math.PI * 1.5, currentAngle);
  ctx.closePath();
  ctx.fillStyle = 'red';
  ctx.fill();
  
  // 绘制圆形外边框
  ctx.beginPath();
  ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);
  ctx.strokeStyle = '#000';
  ctx.stroke();
  
  // 递增角度,控制填充速度
  currentAngle += 0.02;
  // 直到完成一整圈(起点角度+2π)
  if (currentAngle <= Math.PI * 1.5 + Math.PI * 2) {
    requestAnimationFrame(draw);
  }
}

// 启动动画
draw();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:38