当前位置:首页 > 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 元素并设置属性:

js实现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 动态效果:

js实现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

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

注意事项

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

标签: jssvg
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Ja…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…