canvas基础知识

低版本的ie不支持html5,需要引入excanvas.js来让ie支持canvas.
检测
<canvas id="canvas" width="150" height="200" >
你的浏览器不支持canvas
</canvas>
var canvas = document.getElementById(‘canvas‘);
if(canvas.getContext) alert(‘支持canvas‘);

>> 绘制矩形
fillRect(x, y, width, height); //绘制填充矩形 需先设置context.fillStyle
strokeRect(x, y, width, height); //绘制描边矩形 需先设置context.strokeStyle, context.lineWidth
clearRect(x, y, width, height); //清除矩形区域

注:canvas的尺寸最好通过 标签内的width, height设置,用css设置的话效果类似放大了画布和画布上的内容

>> 绘制路径
beginPath(); //开始路径
路径是以一组子路径(直线、弧线等)的形式存储的,每次调用beginPath(),子路径组都会被重置,然后可以绘制新的图形

closePath(); //闭合路径 会尝试用直线连接当前端点和开始端点来闭合路径,若路径本身已闭合或只有1个点 则closePath()什么也不做,闭合路径不是必须的。

stroke(); //描边

fill(); //填充 开放路径将自动闭合,而无需调用closePath();

moveTo(x, y); //移动画笔

lineTo(x, y); //从当前上下文点画直线

arc(x, y, radius, startAngle, endAngle, antiClockwise); //绘制弧线或圆 角度(圆周上的每个点对应一个角度,顺时针方向增大 0.5* Math.PI为半圆的下端点,0*Math.PI为半圆的右端点)

>> 绘制曲线 贝塞尔和二次方曲线
quadraticCurveTo(cx, cy, x, y); //3个点(上下文点 1个控制点 1个端点)
bezierCurveTo(cx1, cy1, cx2, cy2, x, y); //4个点 (上下文点 2个控制点 1个端点)

>> canvas中使用图像
> 创建图片
var img = new Image();
img.onload = function(){
context.drawImage(img, 100,100);
}
img.src = url;
~~ or img.src = dataUrl; 注意dataUrl方式加载的图片优点:图片即时显示不用http请求;缺点:不能被缓存
//如:img.src = ‘data:image/gif;base64,R01GOD....‘

//drawImage()渲染图片到canvas上。
drawImage(imageObj, x, y); //从哪个位置开始渲染图片

> 图片缩放
drawImage(imageObj, x, y, width, height); //从哪个位置以多大尺寸渲染图片 width, height指图片的大小

> 图片切片 可以只渲染图片的一部分都canvas上 有点CSS sprite的味道
对图片裁切(切片)后,以指定的位置和大小渲染到画布
drawImage(imageObj, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight); //切片开始位置,切片大小, 目标放置位置, 目标大小

>> 半透明
context.globalAlpha = 0.3; //全局透明度
context.strokeStyle = ‘rgba(255,0,0,0.3)‘; //半透明颜色实现半透明度
context.fillStyle = ‘rgba(255,0, 0, 0.3)‘;

>> 线型 笔刷设置
lineWidth = "3"; //线条大小
lineCap = ‘round‘/‘square‘/‘butt‘; //线段端点样式
lineJoin = ‘round‘/‘bevel‘/‘miter‘; //两线段连接处的样式
miterLimit = "10"; //lineJoin = ‘miter‘ 时,线段延长相交的最大值

>> 渐变
var grd = context.createLinearGradient(x1, y1, x2, y2); //创建线性渐变 指定渐变起点和终点
var grd = context.createRadialGradient(x1, y1, r1, x2, y2, r2); //创建径向渐变 指定2个圆

创建渐变对象后,就可以用addColorStop()方法添加色标了。
grd.addColorStop(pos, color); pos:0~1的值

>> 图案 图案填充
var pat = context.createPattern(image, type); // type: repeat / repeat-x /repeat-y / no-repeat
如:
var img = new Image();
img.onload = function(){
var ptn = context.createPattern(img, ‘repeat‘);
}
img.src = url;

>> 阴影
context.shadowOffsetX = 2;
context.shadowOffsetY = 2;
context.shadowBlur = 2
context.shadowColor = ‘rgba(0,0,0,0.5)‘;

>> 保存和恢复canvas的状态
canvas状态栈, 调用context.save(),则当前状态入栈,调用context.restore()则顶端状态出栈,成为当前状态。
context.save()
context.restore()
canvas状态包括:
strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor

>> 移动 translate
context.translate(x, y); //移动canvas的原点到新的位置

>> 旋转 rotate
context.rotate(angle); //旋转canvas

>> 缩放 scale
context.scale(xZoom, yZoom);

>> 变形 transform 变换矩阵
context.transform(m11, m12, m21, m22, dx, dy);
变换矩阵为:
m11 m21 dx
m12 m22 dy
0 0 1

>> 组合 compositing, 图形的组合
通常我们绘制多个图形时,总是一个图形绘制在另一个图形上,这样是不够的,图形的堆叠被绘制顺序限制

context.globalCompositeOperation = ..
~~ 当前绘制的图形是source, 之前存在的图形为destination
source-over: 默认值 新图形覆盖在旧的内容上。
destination-over: 原有内容在上面
source-in: 新图形与原有内容重叠部分,显示新图形的,其余部分透明
destination-in:
source-out: 新图形与原有内容不重叠部分,显示新图形的,其余部分透明
destination-out:
source-atop:新图形与原有内容重叠部分会被绘制,并覆盖在上面
destination-atop:新图形与原有内容重叠部分会被绘制,原有内容覆盖在上面
lighter: 两图形重叠部分加色
darker: 两图形重叠部分减色
xor: 重叠部分变透明
copy: 新图形被保留 其他的清除。

>> 裁切路径 clip
context.beginPath();
context.arc(0, 0, 60, 0, 2 * Math.PI, true);
context.clip(); //绘制路径 然后裁切,从而控制绘图的范围

>>基本动画
canvas的动画是通过不断的重绘来实现的
绘制动画帧常用的操作
清空canvas
context.clearRect(x,y,width,height);

保存状态
context.save()

context.restore()

setTimeout, setInterval实现不断重绘

canvas基础知识,布布扣,bubuko.com

时间: 2024-10-10 08:05:19

canvas基础知识的相关文章

canvas 基础知识整理

canvas这个 HTML 元素是为了客户端矢量图形而设计的.它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上. html的基本结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=UTF-8> <title>Document</title> <style> #myCanv

HTML5读书笔记之三:Canvas基础知识

<!doctype html> <head> <title>Canvas Test</title> <meta charset="UTF-8"> <link href="./css/canvas.css" rel="stylesheet" type="text/css"> <script type="text/javascript"

canvas API ,通俗的canvas基础知识(三)

全文说到了三角形,圆形等相关图形的画法,不熟悉的同学可以出门右转,先看看前文,接下来继续我们的图形——曲线. 学过数学,或者是比较了解js 的同学都知道贝塞尔曲线,当然,在数学里面,这是一门高深的学问,js里面的贝塞尔曲线一般是用来做动画的,其实别的地方也有体现,比如说Photoshop里面的钢笔工具,CorelDraw里面的贝塞尔工具等等,canvas中,也是有体现的 当然,如果是单纯的画一条曲线,也可以用前面的方法: var canvas = document.getElementById(

转载 前端基础知识体系 一个新手的学习之路

原帖地址:  转载的原因是我学习前端和php已经4个多月了.看看自己还有那些不足.自己得努力学习,牛人太多.红色是我会的,或者学过的.希望今天把大部分飘红. 一.HTML 标签的分类 标签表示一个元素 按性质划分: Block-Level和Inline-Level 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatting: em, strong, sub, del, ins, small Lists: ul, li

【ruby】ruby基础知识

Install Ruby(安装) For windows you can download Ruby from http://rubyforge.org/frs/?group_id=167 for Linux tryhttp://www.rpmfind.net. Our first program(从此开始) Enter the following into the file, "test.rb". ? 1 puts "Howdy!" At the C: promp

H5基础知识

184讲.HTML5体验案例-画矩形 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title> H5的画布 </title> 6 <style type="text/css"> 7 #my_canvas{border:1px solid blue;} 8 </style> 9 </h

基础知识漫谈(2):从设计UI框架开始

说UI能延展出一丢丢的东西来,光java就有swing,swt/jface乃至javafx等等UI toolkit,在桌面上它们甚至都不是主流,在web端又有canvas.svg等等. 基于这些UI工具包\框架,又产生了大量通用的或者业务性的UI框架,比如Draw2d.GEF.easyUI乃至国内的EChart.白鹭等等. 这些框架的业务范围各异,一个程序员的时间和精力有限,你不可能全部都掌握,又不能预言出是哪一个将来会独步天下,甚至,连当前哪一个最流行,都够打一阵嘴炮. 那,我们应该学什么?

es 模块的基础知识,深度了解

// 一模块的基础知识 /** * export :用于模块输出的出口 * import :文件引入的入口 */ // 1,第一种方式使用export方式输出 var a = 'a'; var b = 'v'; export { a, b }; // 2,使用export作为默认值输出 export { a as streamV1, b as streamV2 }; // 3,export 可以处于任何位置,只要顶端就可以, 不能处于块级作用域 /** * import 文件模块加载 */ //

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use