当前位置:首页 > JavaScript

js 实现转圈

2026-04-06 22:17:59JavaScript

使用 CSS 动画实现转圈效果

通过 CSS 的 @keyframestransform 属性可以轻松实现转圈动画。以下是一个完整的示例:

<div class="spinner"></div>

<style>
.spinner {
  width: 50px;
  height: 50px;
  border: 5px solid rgba(0, 0, 0, 0.1);
  border-radius: 50%;
  border-top-color: #3498db;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>

使用 SVG 实现平滑转圈

SVG 的路径动画可以实现更复杂的转圈效果:

<svg class="spinner" viewBox="0 0 50 50">
  <circle cx="25" cy="25" r="20" fill="none" stroke="#3498db" stroke-width="5"></circle>
</svg>

<style>
.spinner {
  animation: rotate 2s linear infinite;
  width: 50px;
  height: 50px;
}

@keyframes rotate {
  100% { transform: rotate(360deg); }
}

.spinner circle {
  stroke-dasharray: 1, 200;
  stroke-dashoffset: 0;
  animation: dash 1.5s ease-in-out infinite;
}

@keyframes dash {
  0% {
    stroke-dasharray: 1, 200;
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -35;
  }
  100% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -124;
  }
}
</style>

使用 JavaScript 控制动画

通过 JavaScript 动态控制旋转角度可以实现更灵活的转圈效果:

<div id="jsSpinner" style="width:50px;height:50px;background:#3498db;border-radius:50%;"></div>

<script>
let angle = 0;
const spinner = document.getElementById('jsSpinner');

function rotate() {
  angle = (angle + 2) % 360;
  spinner.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(rotate);
}

rotate();
</script>

使用 Canvas 绘制动态转圈

Canvas API 可以创建更复杂的转圈动画效果:

<canvas id="canvasSpinner" width="100" height="100"></canvas>

<script>
const canvas = document.getElementById('canvasSpinner');
const ctx = canvas.getContext('2d');
let progress = 0;

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  ctx.beginPath();
  ctx.arc(50, 50, 40, 0, Math.PI * 2);
  ctx.strokeStyle = '#ddd';
  ctx.lineWidth = 5;
  ctx.stroke();

  ctx.beginPath();
  ctx.arc(50, 50, 40, -Math.PI/2, -Math.PI/2 + (progress * Math.PI * 2));
  ctx.strokeStyle = '#3498db';
  ctx.lineWidth = 5;
  ctx.stroke();

  progress = (progress + 0.01) % 1;
  requestAnimationFrame(draw);
}

draw();
</script>

使用第三方库实现高级转圈

流行的动画库如 GSAP 可以实现更丰富的转圈效果:

js 实现转圈

<div id="gsapSpinner" style="width:50px;height:50px;background:#3498db;border-radius:50%;"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/gsap.min.js"></script>
<script>
gsap.to("#gsapSpinner", {
  rotation: 360,
  duration: 2,
  repeat: -1,
  ease: "linear"
});
</script>

以上方法提供了从简单到复杂的多种实现方式,可以根据项目需求选择最适合的方案。CSS 方案性能最佳,适合大多数场景;JavaScript 方案提供更多控制;Canvas 和 SVG 适合需要定制化视觉效果的情况;第三方库则简化了复杂动画的实现。

标签: js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…