Canvas简介与基本使用(上)

简介: Canvas简介与基本使用

1. Canvas简介


canvas 是 HTML5 新增的一个标签,可以使用JavaScript来绘制各种图案。


2. Canvas 和 SVG 的区别


svg 本质上是一种使用 XML 描述 2D 图形的语言

1.svg 创建的每一个元素都是一个独立的 DOM 元素,可以通过 css 和 JS来操控 dom。

2.修改 svg 中的 DOM 元素,系统会自动进行 DOM 重绘。


Canvas 通过 JavaScript 来绘制 2D 图形

1.Canvas 只是一个 HTML 元素,其中的图形不会单独创建 DOM 元素,因此不能通过 JS 操控 Canvas 内单独的图形。

2.一旦图形被绘制完成,如果数据发生变化就需要重新绘制。


使用场景

如果要展示的数据量比较大,比如一条数据就是一个元素节点,那使用 canvas 会比较合适;

如果用户操作的交互比较多,而且对清晰度有要求(矢量图),那么使用 svg 会比较合适。


3. Canvas基本使用


3.1 创建Canvas


<!DOCTYPE html>
<html lang="en">
<head>
  <title>canvas 基本使用</title>
</head>
<body>
  <canvas width="200" height="200">
    当前浏览器不支持canvas元素,请升级或更换浏览器!
  </canvas>
</body>
</html>

效果


画布大小

canvas 默认画布大小是 300 * 150。


调整画布大小有两种方案:


第一种 : 通过 css 样式 ( 不推荐 )

<html>
<head>
    <style>
        canvas {
            width: 400px;
            height: 400px;
        }
    </style>
</head>
<body>
    <canvas></canvas>
</body>
</html>

使用CSS来定义大小,在绘制时图像会伸缩:如果 CSS 的尺寸与初始画布的比例不一致,它会出现扭曲。

比如本例变成 400px * 400px,那宽度就由 300px 拉伸到 400px,高度由 150px 拉伸到 400px。


第二种 : 通过标签属性 ( 推荐 )

<html>
<head>
    ...
</head>
<body>
    <canvas width="400" height="400"></canvas>
</body>
</html>

所以,使用canvas 元素提供的 width 和 height 两个属性,来设置画布的宽高。


3.2 渲染上下文


创建了一个 Canvas 画布,接下来就是获取到 Canvas 的上下文环境,通过getContext() 获得渲染上下文和绘画功能。

<html>
<head>
    ...
</head>
<body>
    <canvas width="400" height="400"></canvas>
</body>
</html>

上下文类型:


2d:建立一个二维渲染上下文。

webgl: 创建一个 WebGLRenderingContext 三维渲染上下文对象。

webgl2:创建一个 WebGL2RenderingContext 三维渲染上下文对象;只在实现 WebGL 版本2 (OpenGL ES 3.0)的浏览器上可用。


3.3 画布坐标


Canvas 使用的是 W3C 坐标系 ,也就是遵循我们屏幕、报纸的阅读习惯,从上往下,从左往右,左上角为原点。


3.4 绘制直线


最简单的就是绘制一条直线。

需要用到这3个方法:


moveTo(x, y):设置初始位置。

lineTo(x, y):下一个点的坐标 (x, y)。

stroke():通过线条来绘制图形轮廓。

<canvas id="canvas" width="400" height="400"></canvas>
<script>
  // 获取 canvas 元素
  var canvas = document.getElementById('canvas');
  // 获取绘图上下文
  var ctx = canvas.getContext('2d');
  // 绘制直线
  ctx.moveTo(50, 50);
  ctx.lineTo(200, 200);
  ctx.stroke();
</script>
相关文章
|
4月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
462 0
|
7月前
|
人工智能 安全 算法
隐藏在我们身边的“科技引擎”,中兴服务器有多强?
隐藏在我们身边的“科技引擎”,中兴服务器有多强?
232 0
隐藏在我们身边的“科技引擎”,中兴服务器有多强?
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
447 5
|
监控 Devops Linux
推荐类似宝塔的开源面板工具
本文介绍了几款类似于宝塔面板的开源服务器管理工具,包括Websoft9、1Panel、Webmin和Cockpit。这些工具在易用性、功能性和安全性方面各有千秋,能够满足不同用户的需求,从一键部署应用到高级服务器管理,提供了丰富的选择。
1795 1
推荐类似宝塔的开源面板工具
|
存储 前端开发 JavaScript
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
643 0
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
774 7
|
小程序 搜索推荐 前端开发
短剧小程序开发案例
首先,明确你的短剧平台的目标用户群体和他们的需求。比如,年轻用户可能更倾向于轻松、幽默的短剧内容,而家庭用户则可能更偏爱教育、亲子类的短剧。了解用户需求有助于你设计更符合他们口味的功能和界面
|
前端开发 API
自定义 Hooks 在 Vue3 中的应用和重要性
自定义 Hooks 在 Vue3 中的应用和重要性
|
前端开发
CSS实现列表滚动效果
CSS实现列表滚动效果
517 0
|
Web App开发 编解码 前端开发
盘点10个基于 Canvas 的优秀开源项目!
盘点10个基于 Canvas 的优秀开源项目!
1668 0