当前位置:首页 > JavaScript

js实现svg

2026-02-02 09:49:49JavaScript

SVG 基础概念

SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,可直接嵌入 HTML 或通过 JavaScript 动态操作。其优势在于缩放不失真,适合图标、图表等场景。

在 HTML 中嵌入 SVG

直接内联 SVG 到 HTML 中,可通过 DOM 操作修改属性或结构:

<svg id="mySvg" width="200" height="200">
  <circle cx="50" cy="50" r="40" fill="red" />
</svg>

通过 JavaScript 创建 SVG

使用 document.createElementNS 创建 SVG 元素并设置属性:

const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("width", "200");
svg.setAttribute("height", "200");

const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", "50");
circle.setAttribute("cy", "50");
circle.setAttribute("r", "40");
circle.setAttribute("fill", "blue");

svg.appendChild(circle);
document.body.appendChild(svg);

动态修改 SVG 属性

通过 JavaScript 直接操作已有 SVG 元素的属性:

const myCircle = document.querySelector("#mySvg circle");
myCircle.setAttribute("fill", "green"); // 修改颜色
myCircle.setAttribute("r", "30");      // 修改半径

实现动画效果

使用 requestAnimationFrame 或 CSS 动画实现 SVG 动态效果:

let angle = 0;
function animate() {
  angle += 0.02;
  const x = 50 + Math.cos(angle) * 30;
  const y = 50 + Math.sin(angle) * 30;
  myCircle.setAttribute("cx", x);
  myCircle.setAttribute("cy", y);
  requestAnimationFrame(animate);
}
animate();

事件交互

为 SVG 元素添加事件监听器实现交互:

myCircle.addEventListener("click", () => {
  myCircle.setAttribute("fill", "purple");
});

使用第三方库

若需复杂功能,可借助库如 Snap.svgD3.js

js实现svg

// 使用 D3.js 示例
d3.select("#mySvg circle")
  .transition()
  .duration(1000)
  .attr("r", 50);

注意事项

  • SVG 元素必须使用 createElementNS 而非 createElement
  • 坐标系统以左上角为原点 (0, 0),X 轴向右,Y 轴向下。
  • 路径(<path>)通过 d 属性定义,支持复杂图形绘制。

标签: jssvg
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现百叶窗

js实现百叶窗

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…