当前位置:首页 > JavaScript

js实现动态画圆

2026-03-16 07:17:58JavaScript

使用 Canvas API 动态画圆

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

js实现动态画圆

<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 操作动态创建元素:

js实现动态画圆

<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 提供了强大的数据可视化功能:

<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
分享给朋友:

相关文章

css制作动态超链接

css制作动态超链接

使用伪类实现悬停效果 通过 :hover 伪类可以定义鼠标悬停时的样式变化,例如改变颜色或添加下划线: a:hover { color: #ff6600; text-decoration:…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js jquery

js jquery

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…