当前位置:首页 > JavaScript

js实现动态画圆

2026-03-16 07:17:58JavaScript

使用 Canvas API 动态画圆

Canvas API 是 HTML5 提供的绘图工具,适合动态绘制图形。以下是一个完整示例:

<canvas id="myCanvas" width="400" height="400"></canvas>
<script>
  const canvas = document.getElementById('myCanvas');
  const ctx = canvas.getContext('2d');

  function drawCircle(x, y, radius) {
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2);
    ctx.stroke();
  }

  // 动态绘制逐渐变大的圆
  let radius = 0;
  function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    drawCircle(200, 200, radius);
    radius += 1;
    if (radius < 100) {
      requestAnimationFrame(animate);
    }
  }
  animate();
</script>

使用 SVG 动态创建圆形

SVG 是矢量图形标准,可通过 DOM 操作动态创建元素:

<svg id="mySvg" width="400" height="400"></svg>
<script>
  const svg = document.getElementById('mySvg');

  function createCircle(cx, cy, r) {
    const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
    circle.setAttribute('cx', cx);
    circle.setAttribute('cy', cy);
    circle.setAttribute('r', r);
    circle.setAttribute('stroke', 'black');
    circle.setAttribute('fill', 'none');
    svg.appendChild(circle);
    return circle;
  }

  // 动态改变半径
  const circle = createCircle(200, 200, 0);
  let radius = 0;
  function grow() {
    radius += 1;
    circle.setAttribute('r', radius);
    if (radius < 100) {
      requestAnimationFrame(grow);
    }
  }
  grow();
</script>

使用 CSS 动画实现

纯 CSS 结合 JavaScript 也能实现动态效果:

<div id="circle" style="
  width: 0;
  height: 0;
  border-radius: 50%;
  border: 2px solid black;
  position: absolute;
"></div>
<script>
  const circle = document.getElementById('circle');
  let size = 0;

  function expand() {
    size += 2;
    circle.style.width = size + 'px';
    circle.style.height = size + 'px';
    circle.style.left = (200 - size/2) + 'px';
    circle.style.top = (200 - size/2) + 'px';

    if (size < 200) {
      requestAnimationFrame(expand);
    }
  }
  expand();
</script>

使用第三方库(如 D3.js)

D3.js 提供了强大的数据可视化功能:

js实现动态画圆

<script src="https://d3js.org/d3.v7.min.js"></script>
<svg id="d3-circle" width="400" height="400"></svg>
<script>
  const svg = d3.select("#d3-circle");

  svg.append("circle")
    .attr("cx", 200)
    .attr("cy", 200)
    .attr("r", 0)
    .attr("stroke", "black")
    .attr("fill", "none")
    .transition()
    .duration(2000)
    .attr("r", 100);
</script>

性能优化建议

  • 使用 requestAnimationFrame 而非 setInterval 实现动画
  • 对于复杂动画,考虑使用 WebGL(如 Three.js)
  • 清除画布时使用 clearRect 而非重新创建画布
  • 避免在动画循环中频繁创建新对象

以上方法可根据具体需求选择,Canvas 适合像素操作和游戏,SVG 适合可交互的矢量图形,CSS 适合简单 UI 效果,D3.js 适合数据可视化场景。

标签: 动态js
分享给朋友:

相关文章

vue实现动态显示页面

vue实现动态显示页面

动态显示页面的实现方法 在Vue中实现动态显示页面通常涉及数据绑定、条件渲染、列表渲染以及动态组件等技术。以下是几种常见的实现方式: 数据驱动视图 Vue的核心思想是数据驱动视图,通过修改数据自动更…

js 实现vue

js 实现vue

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

vue实现动态禁用

vue实现动态禁用

Vue 实现动态禁用的方法 在 Vue 中,可以通过多种方式实现动态禁用元素或组件。以下是几种常见的方法: 使用 v-bind 绑定 disabled 属性 通过 v-bind 动态绑定 disa…

js节流实现

js节流实现

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…