当前位置:首页 > JavaScript

js实现转圈效果

2026-03-16 03:34:53JavaScript

使用CSS动画实现转圈效果

通过CSS的@keyframestransform属性创建旋转动画,再通过JavaScript控制动画的启停。

<style>
  .spinner {
    width: 50px;
    height: 50px;
    border: 5px solid rgba(0, 0, 0, 0.1);
    border-radius: 50%;
    border-top-color: #09f;
    animation: spin 1s linear infinite;
  }
  @keyframes spin {
    to { transform: rotate(360deg); }
  }
</style>

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

<script>
  // 控制动画
  const spinner = document.getElementById('spinner');
  spinner.style.animationPlayState = 'running'; // 启动
  // spinner.style.animationPlayState = 'paused'; // 暂停
</script>

使用Canvas绘制动态转圈

通过Canvas的requestAnimationFrame实现更灵活的绘制控制。

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

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

  function drawSpinner() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    ctx.arc(50, 50, 40, 0, Math.PI * 2);
    ctx.strokeStyle = '#eee';
    ctx.lineWidth = 8;
    ctx.stroke();

    ctx.beginPath();
    ctx.arc(50, 50, 40, 0, angle);
    ctx.strokeStyle = '#09f';
    ctx.lineWidth = 8;
    ctx.stroke();

    angle += 0.1;
    if (angle > Math.PI * 2) angle = 0;
    requestAnimationFrame(drawSpinner);
  }

  drawSpinner();
</script>

使用SVG实现转圈效果

SVG的<animateTransform>标签原生支持旋转动画。

<svg width="50" height="50" viewBox="0 0 50 50">
  <circle cx="25" cy="25" r="20" fill="none" stroke="#eee" stroke-width="4"/>
  <circle cx="25" cy="25" r="20" fill="none" stroke="#09f" stroke-width="4" stroke-dasharray="30 100">
    <animateTransform 
      attributeName="transform"
      type="rotate"
      from="0 25 25"
      to="360 25 25"
      dur="1s"
      repeatCount="indefinite"/>
  </circle>
</svg>

使用第三方库(如Lottie)

通过Lottie加载专业的AE动画效果。

js实现转圈效果

<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.4/lottie.min.js"></script>
<div id="lottie-spinner" style="width: 100px; height: 100px;"></div>

<script>
  lottie.loadAnimation({
    container: document.getElementById('lottie-spinner'),
    renderer: 'svg',
    loop: true,
    autoplay: true,
    path: 'https://assets9.lottiefiles.com/packages/lf20_p8bfn5to.json'
  });
</script>

每种方法各有特点:CSS方案最简单,Canvas可控性最强,SVG兼容性好,Lottie适合复杂动画。根据项目需求选择合适方案。

标签: 效果js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…