0

0

如何用javascript创建图形_canvas和svg该如何选择【教程】

紅蓮之龍

紅蓮之龍

发布时间:2026-01-20 20:45:44

|

515人浏览过

|

来源于php中文网

原创

canvas适合像素级高频重绘(如游戏、实时波形),svg适合需dom交互、响应式与无障碍的矢量图形(如图标、图表);二者常混合使用,各取所长。

如何用javascript创建图形_canvas和svg该如何选择【教程】

Canvas 和 SVG 不是“选一个就对了”的关系,关键看你要画什么、怎么交互、是否需要响应式或无障碍支持。

Canvas 适合:像素级控制、高频重绘、游戏或数据可视化中的大量动态点

Canvas 是位图,getContext('2d') 返回的是绘图上下文,所有操作都作用于像素缓冲区。它不保留绘制对象的结构信息,画完就“忘了”。

  • 适合每秒重绘几十次的场景(比如粒子系统、实时波形图)
  • 导出为 toDataURL()toBlob() 直接得图片,适合截图、上传
  • 无法用 CSS 选中或样式化单个图形,事件只能靠坐标计算(比如用 isPointInPath() 判断点击位置)
  • 缩放时会模糊,除非手动监听 window.devicePixelRatio 并重设 canvas.width/height
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
ctx.fillStyle = 'red';
ctx.beginPath();
ctx.arc(100, 100, 20, 0, Math.PI * 2);
ctx.fill(); // 这个圆一旦画完,就只是像素,没有“圆对象”概念

SVG 适合:图标、图表、可缩放矢量图、需 DOM 交互或 SEO/无障碍的图形

SVG 是 XML 标签构成的 DOM 树,每个 <circle></circle><path></path> 都是真实节点,能绑定事件、加 class、用 CSS 动画、被屏幕阅读器读取。

使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件

如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更

下载
  • 天然响应式:viewBox 属性让 SVG 自适应容器宽高,不糊
  • 可直接用 document.querySelector('circle') 拿到元素,改 cxfill 等属性即可更新
  • 适合静态或低频更新的图形(比如地图标注、流程图),但上万节点时性能会明显下降
  • 不能直接用 drawImage() 绘制,想混合 Canvas 内容得转成 <img alt="如何用javascript创建图形_canvas和svg该如何选择【教程】" > 或用 canvg
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
  <circle cx="100" cy="100" r="20" fill="red" id="myCircle"/>
</svg>
<script>
  document.getElementById('myCircle').addEventListener('click', () => {
    this.setAttribute('fill', 'blue'); // 直接操作 DOM 属性
  });
</script>

混合使用很常见:SVG 做骨架 + Canvas 渲染动态层

比如一个股票 K 线图:SVG 画坐标轴、文字标签、网格线(稳定、可缩放、可选中);Canvas 叠在上面画实时价格折线(高频更新、抗锯齿好、GPU 加速)。

立即学习Java免费学习笔记(深入)”;

  • position: absolute 让两者对齐,注意 transform: scale() 对 Canvas 的影响比 SVG 复杂
  • 鼠标事件需统一坐标系:SVG 用 getScreenCTM() 转换,Canvas 用 getBoundingClientRect() 手动算偏移
  • 导出整图时,得分别处理 SVG 的 outerHTML 和 Canvas 的 toDataURL(),再合成

真正容易被忽略的是文本渲染和字体 fallback:Canvas 里 fillText() 不支持自动换行、富文本或本地字体加载失败静默降级;SVG 的 <text></text> 支持 textLengthlengthAdjust,还能用 @font-face。如果图形里有大量中文或需要打印,SVG 的文本可靠性高得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1944

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2118

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1162

2024.11.28

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

809

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

28

2025.12.06

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

4249

2024.08.14

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

83

2023.11.23

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

549

2023.10.23

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

44

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 40.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号