javaScript canvas从入门到骨灰级玩家(基础篇)
前言
本文针对有一点前端基础的同学,字数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从入门到骨灰级玩家(基础篇)相关推荐
- 视频教程-30小时微信小程序从入门到精通课程-基础篇-微信开发
30小时微信小程序从入门到精通课程-基础篇 8年IT开发经验,6年IT教育经验,喜欢把复杂逻辑用简单的表述传达给学生,传授编程知识,讲述生活故事 曹圣捷 ¥12.00 立即订阅 扫码下载「CSDN程序 ...
- jmeter-5-从入门到放弃【基础篇】
一.Jmeter简介: 1.简介 Jmeter 是一款基于Java程序开发的可视化客户端 (类似postman客户端).具有开源.高可扩展性.高移植性.多线程框架等特点. 简单来说它就是:界面友好,能 ...
- 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)
JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...
- 【MySQL入门到高级之基础篇(参考尚硅谷宋红康老师2022版)】
文章目录 第一章数据库概述 为什么要使用数据库 数据库与数据库管理系统 数据库的相关概念 数据库与数据库管理系统的关系 常见的数据库管理系统排名(DBMS) 常见的数据库介绍 MySQL介绍 概述 M ...
- docker从入门到入土(基础篇)
Hello~大家好,这里是KOKO师傅! 今天我们来学习Docker与微服务实战的相关内容. docker简介 docker是什么 docker为什么出现 AB法则: before after bef ...
- Flutter从入门到精通之Dart基础篇(一)
学Flutter必须先学会Dart 目录 什么是Dart? 环境搭建 入门HelloWorld 基础知识 1. 变量.常量.命名规则 2. Dart的数据类型 3. Dart的条件表达式 4. ...
- 【NGINX入门指北】 基础篇
文章目录 一.Nginx 简介 1.什么是Nginx? 2.Nginx 的作用 二.Nginx的安装 1.Windows下安装Nginx 2.Linux下安装Nginx 1.源码编译安装 2.yum ...
- 【MySQL8入门到精通】基础篇-Windows安装及卸载MySQL
- 远控免杀从入门到实践(1):基础篇
郑重声明 1.文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 2.文中提到的杀软检测指标是 virustotal.com(简称 ...
最新文章
- 日志记录组件[Log4net]详细介绍(转)
- Java接口和Java抽象类的认识
- pandas(三) -- DataFrame的基本操作
- 《Python Cookbook 3rd》笔记(2.18):字符串令牌解析
- 了解css中伪元素 before和after的用法
- 顺序存储二叉树之寻找公共祖先节点
- 直流电机调速c语言程序,分享一个51单片机直流电机调速源程序
- ES6中Promise的入门(结合例子)
- 博客园文章中图片太大显示不全的解决办法
- 【职场日语】日文简历模板
- GD32F103替换STM32F103
- 博途V15添加GSD文件
- Redis6.2.6下载和安装
- spss基本总结——聚类分析
- python whl文件安装_python whl文件怎么安装
- Photoshop水平线快捷键怎么使用的?
- 欧拉回路 poj-1392 Ouroboros Snake
- APP运行时Crash自动修复系统
- sublime 实现浏览器预览功能
- h5跳转微信公众号文章,小程序,任意站跳转链接制作方法?
热门文章
- android 仿微信通知栏
- Revit标注问题:尺寸界线长度和“快速尺寸定位标注”
- SAP GUI Dracula Theme 主题
- 手机与单片机NFC通讯方案,手机NFC通讯方案,单片机NFC通信方案
- 华为ap WA131SN-NZ设置胖ap开启wifi无线网络
- 20-CVPR-Multi-branch and Multi-scale Attention Learning for Fine-Grained Visual Categorization
- 大型互联网系统架构演进之路
- 7、帆软填报-分页预览
- 词法分析——词法分析的任务
- 如何实现Odoo兼容Citus实现更多数据储存