当前位置:首页 > 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 的路径动画可以实现更复杂的转圈效果:

js 实现转圈

<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 动态控制旋转角度可以实现更灵活的转圈效果:

js 实现转圈

<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 可以实现更丰富的转圈效果:

<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实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…