Canvas之概述,画布与画笔

Canvas之概述,画布与画笔

概述

Canvas 解决了之前使用 flash 带来的兼容性,性能和开发成本的问题。 Canvas 是一个标签,并不能绘制图形,它需要使用 Canvas API 才能进行绘制。

Canvas 绘制的是位图。位图可以很好地控制每一个像素,但在缩放时会失真,并且也不好在页面进行交互。而矢量图可以很好地交互,因为它是一个个dom对象。体积更小,渲染没有位图好,但不会失真。 Canvas 和引入的图片类似,可以直接右键保存。

画布画笔的创建

js 复制代码
<canvas id="canvas">
    您的浏览器版本过低,不支持canvas,请升级浏览器或更换浏览器
</canvas>
<script>
    //获取标签创建画布
    const canvas1 = document.querySelector('#canvas');
    //获取画笔
    const context1 = canvas.getContext('2d');

    //使用js创建画布
    const canvas2 = document.createElement('canvas');
    document.body.append(canvas2);
    //判断是否浏览器支持canvas
    if(!canvas2.getContext){
        console.log('您的浏览器版本过低,不支持canvas,请升级浏览器或更换浏览器');
    }else{
        const context2 = canvas2.getContext('2d');
    }
</script>

有两种方式可以创建画布。一种是使用 canvas 标签,然后获取到画布,另一种是直接创建 canvas 元素,然后放到 body 里。并且还可以创建画笔。

创建画笔时可以进行判断,如果浏览器不支持 canvas ,则画笔就不会被找到。当然也可以直接在标签内写入不支持的文本或图片。使用第二种创建画布的方式更被推荐。因为这样可以被编辑器识别,可以有更好的提示。不过在实际效果上两者相同。

画布区域特点

js 复制代码
<style>
        canvas {
            border: 1px solid #ccc;
            display: block;
            margin-left: 100px;
        }

        #c1 {
            width: 200px;
            height: 200px;
        }
        #c2 {
            width: 400px;
            height: 400px;
        }
        #c3 {
            width: 800px;
            height: 800px;
        }
    </style>
</head>

<body>
    <canvas id="c1" width="400" height="400"></canvas>
    <canvas id="c2" width="400" height="400"></canvas>
    <canvas id="c3" width="400" height="400"></canvas>
    <script>
        {
        const canvas = document.querySelector('#c1');
        const context = canvas.getContext('2d');
        context.fillRect(100, 100, 100, 100);
        }
        {
        const canvas = document.querySelector('#c2');
        const context = canvas.getContext('2d');
        context.fillRect(100, 100, 100, 100);
        }
        {
        const canvas = document.querySelector('#c3');
        const context = canvas.getContext('2d');
        context.fillRect(100, 100, 100, 100);
        }
    </script>
</body>

我们可以在画布上填充一个矩形,都以画布左上角的 (0,0) 原点为起始点,分别为 x,y,w,h 四项。画布内有一个坐标系。这个坐标系的坐标是无限的,但我们只能通过 width 和 height 得到一个固定的尺寸。默认的宽高为 300*150 ,并且 canvas 是一个行内元素,也就是说它是并列排放,一行一行排放。

还有一个放置区域。画好的图像在画布区域,我们要把它放到放置区域。并且我们需要调整它的大小通过 style 样式。可以放大或者缩小,如果放大会导致失真。默认让画布区域和放置区域相同。

相关推荐
We་ct1 分钟前
LeetCode 50. Pow(x, n):从暴力法到快速幂的优化之路
开发语言·前端·javascript·算法·leetcode·typescript·
柠檬味的Cat4 分钟前
使用腾讯云COS作为WordPress图床的实践
前端·github·腾讯云
Hilaku6 分钟前
卷AI、卷算法、2026 年的前端工程师到底在卷什么?
前端·javascript·面试
非凡ghost8 分钟前
AIMP(音乐播放软件)
前端·windows·音视频·firefox
xiaotao13110 分钟前
Vite 完全学习指南
前端·vite·前端打包
军军君0124 分钟前
Three.js基础功能学习十五:智能黑板实现实例二
开发语言·前端·javascript·vue.js·3d·threejs·三维
IT枫斗者32 分钟前
构建具有执行功能的 AI Agent:基于工作记忆的任务规划与元认知监控架构
android·前端·vue.js·spring boot·后端·架构
hotlinhao33 分钟前
Nginx rewrite last 与 redirect 的区别——Vue history 模式短链接踩坑记录
前端·vue.js·nginx
ZC跨境爬虫35 分钟前
海南大学交友平台开发实战day7(实现核心匹配算法+解决JSON请求报错问题)
前端·python·算法·html·json
下北沢美食家38 分钟前
CSS面试题2
前端·css