前言

本文针对有一点前端基础的同学,字数2684字,预计阅读5分钟。
如果你不认为自己的canvas水平能吊打大部分职业玩家,建议就不要放进收藏夹里吃灰了。

吃个包子的时间就能看完,这点信息量还能给你撑死?

基本用法

  • 毋庸置疑,在HTML结构中肯定是要有一个DOM元素对象承接绘图上下文的。
<canvas id="drawing" width="300" height="300">draw a falleg picture</canvas>
  • 通过js获取绘图上下文和绘图上下文的引用(这两者是不一样的,请看代码)。在调用的时候一定要先检测getContext()方法是否存在,有些浏览器会为HTML规范外的元素创建默认的HTML元素对象。
//获取绘画上下文
var falleg = document.getElementById("falleg");
if(falleg.getContext){//获取绘画上下文的引用,也可以说是创建一块2d画布var context = falleg.getContext("2d");
}
  • 使用toDataURL()方法,可以导出在< canvas>元素上绘制的图像。这个方法接受一个参数,即图片的MIME类型格式,适合用于创建图像的任何上下文。但注意toDataURL()是canvas对象的方法,不是上下文对象的方法。如:
var falleg = document.getElementById("falleg");
//确定浏览器支持<canvas>元素
if(falleg.getContext){var imgURL = falleg.toDataURL("image/png");var image = document.createElement("img");image.src = imgURL;document.body.appendChild(image);
}

2D上下文

可以绘制简单的2D图形,比如矩形、弧形和路径,坐标始于< canvas>左上角,原点坐标(0,0)。本篇比较简单,主要列举操作的方法,不细节展开。大致扫一遍就行,加深印象。

填充和描边

方法:
fillStyle() :填充
strokeStyle() :描边
+++++++++++++++
这两属性的值可以是字符串、渐变对象或模式对象。设置之后所有涉及描边和填充的操作都将使用这两个样式。默认"#000000"。

绘制矩形

方法:
fillRect() :填充满的矩形
strokeRect() :描边矩形
clearRect() :清除矩形区域
++++++++++++++++++++
矩形是唯一一种可以直接在2D上下文中绘制的形状。这三个方法都能接受4个参数:矩形的x,y坐标、宽度和高度。填充颜色可由前面填充描边的方法指定。描边线条的宽度由lineWidth属性控制,该属性的值可以是任意整数。通过lineCap属性可以控制线条末端的形状是平头、圆头还是方头。lineJoin属性控制线条相交方式是圆交、斜交还是斜接。

绘制路径

方法:
arc(x, y, radius, startAngle, endAngle, counterclockwise) :以(x,y)为圆心绘制弧线
arcTo(x1, y1, x2, y2, radius) :从上一点开始绘制弧线
bezierCurveTo(x1, y1, x2, y2, x, y) :从上一点开始绘制曲线
lineTo(x, y) :从上一点开始绘制直线
moveTo(x, y) :将绘图游标移到(x, y),不画线
quadraticCurveTo(cx, cy, x, y) :从上一点画二次曲线
rect(x, y, width, height),不同于strokeRect() :绘制矩形路径
beginPath() :开始路径
closePath() :闭合路径
fill() :结束后填充,fillStyle()是结束前填充
stroke() :结束后描边,strokeStyle()是结束前描边
clip() :剪切区域

绘制文本

方法:
fillText() :充满
strokeText() :描边
measureText() :确定文本大小

变换

方法:
rotate(angle) :围绕原点旋转图像angle
scale(scaleX, scaleY) :缩放图像
translate(x, y) :移动坐标原点到某个位置
transform(m1_1, m1_2, m2_1, m2_2, dx, dy) :修改变换矩阵,缩放、旋转、移动并倾斜当前的环境
setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy) :重置变换矩阵

绘制图像

方法:
drawImage(image, x1, y1)、drawImage(image, x1, y1, w, h)、drawImage(image, x1, y1, x2, y2, x3, y3, w, h) :绘制图像,图像不能来自其他域

阴影

方法:
shadowColor() :阴影颜色
shadowOffsetX() :x轴偏移
shadowOffsetY() :y轴偏移
shadowBlur() :模糊像素数

渐变

方法:

CanvasGradient实例表示

createLinearGradient(bx, by, ex, ey) :创建线性渐变
addColorStop() :指定色标
createRadialGradient(bx, by, r1, ex, ey, r2) :创建径向(放射)渐变

模式

方法:
createPattern(img, mode) :也就是重复图像的方式,可接受video元素

使用图像数据

方法:
getImageData(x, y, w, h) :取得图像原始数据,返回对象为imageData的实例。
putImageData(imageData, x, y) :把图像数据绘制到画布上

合成

方法:
globalAlpha :属性值,表示全局透明度
globalCompositionOperation :属性值,后面绘制的图形与先绘制图形的结合方式(source-over、source-in、source-out、source-atop、destination-over、destination-in、destination-out、destination-atop、lighter、copy、xor)

javaScript canvas从入门到骨灰级玩家(基础篇)相关推荐

  1. 视频教程-30小时微信小程序从入门到精通课程-基础篇-微信开发

    30小时微信小程序从入门到精通课程-基础篇 8年IT开发经验,6年IT教育经验,喜欢把复杂逻辑用简单的表述传达给学生,传授编程知识,讲述生活故事 曹圣捷 ¥12.00 立即订阅 扫码下载「CSDN程序 ...

  2. jmeter-5-从入门到放弃【基础篇】

    一.Jmeter简介: 1.简介 Jmeter 是一款基于Java程序开发的可视化客户端 (类似postman客户端).具有开源.高可扩展性.高移植性.多线程框架等特点. 简单来说它就是:界面友好,能 ...

  3. 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)

    JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...

  4. 【MySQL入门到高级之基础篇(参考尚硅谷宋红康老师2022版)】

    文章目录 第一章数据库概述 为什么要使用数据库 数据库与数据库管理系统 数据库的相关概念 数据库与数据库管理系统的关系 常见的数据库管理系统排名(DBMS) 常见的数据库介绍 MySQL介绍 概述 M ...

  5. docker从入门到入土(基础篇)

    Hello~大家好,这里是KOKO师傅! 今天我们来学习Docker与微服务实战的相关内容. docker简介 docker是什么 docker为什么出现 AB法则: before after bef ...

  6. Flutter从入门到精通之Dart基础篇(一)

    学Flutter必须先学会Dart 目录 什么是Dart? 环境搭建 入门HelloWorld 基础知识 1.  变量.常量.命名规则 2.  Dart的数据类型 3.  Dart的条件表达式 4.  ...

  7. 【NGINX入门指北】 基础篇

    文章目录 一.Nginx 简介 1.什么是Nginx? 2.Nginx 的作用 二.Nginx的安装 1.Windows下安装Nginx 2.Linux下安装Nginx 1.源码编译安装 2.yum ...

  8. 【MySQL8入门到精通】基础篇-Windows安装及卸载MySQL

  9. 远控免杀从入门到实践(1):基础篇

    郑重声明 1.文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 2.文中提到的杀软检测指标是 virustotal.com(简称 ...

最新文章

  1. 日志记录组件[Log4net]详细介绍(转)
  2. Java接口和Java抽象类的认识
  3. pandas(三) -- DataFrame的基本操作
  4. 《Python Cookbook 3rd》笔记(2.18):字符串令牌解析
  5. 了解css中伪元素 before和after的用法
  6. 顺序存储二叉树之寻找公共祖先节点
  7. 直流电机调速c语言程序,分享一个51单片机直流电机调速源程序
  8. ES6中Promise的入门(结合例子)
  9. 博客园文章中图片太大显示不全的解决办法
  10. 【职场日语】日文简历模板
  11. GD32F103替换STM32F103
  12. 博途V15添加GSD文件
  13. Redis6.2.6下载和安装
  14. spss基本总结——聚类分析
  15. python whl文件安装_python whl文件怎么安装
  16. Photoshop水平线快捷键怎么使用的?
  17. 欧拉回路 poj-1392 Ouroboros Snake
  18. APP运行时Crash自动修复系统
  19. sublime 实现浏览器预览功能
  20. h5跳转微信公众号文章,小程序,任意站跳转链接制作方法?

热门文章

  1. android 仿微信通知栏
  2. Revit标注问题:尺寸界线长度和“快速尺寸定位标注”
  3. SAP GUI Dracula Theme 主题
  4. 手机与单片机NFC通讯方案,手机NFC通讯方案,单片机NFC通信方案
  5. 华为ap WA131SN-NZ设置胖ap开启wifi无线网络
  6. 20-CVPR-Multi-branch and Multi-scale Attention Learning for Fine-Grained Visual Categorization
  7. 大型互联网系统架构演进之路
  8. 7、帆软填报-分页预览
  9. 词法分析——词法分析的任务
  10. 如何实现Odoo兼容Citus实现更多数据储存