03_HTML Canvas第一天
视频来源:麦子学院 讲师:刘慧涛
w3cshool之HTML5画布:http://www.w3school.com.cn/html5/html_5_canvas.asphtml5 canvas参考手册:http://www.w3school.com.cn/tags/html_ref_canvas.asp
begin
- 绘制矩形
fillStyle='颜色'
fillRect(x,y,width,height)
strokeStyle='颜色'
lineWidth=10
lineJoin="meter|round|bevel"
strokeRect=(x,y,width,height) - 绘制文字
fillText(text,x,y,[maxwidth])
strokeText(text,x,y,[maxwidth])
font='bold 45px 宋体'
textAlign设置字符串水平对齐方式 - textAlign="start|end|left|right|center"
textBaselign设置垂直对齐方式 - textBaselign="top|hanging|middle|alphabetic|bottom"*1,2详情参考另一篇随笔:http://www.cnblogs.com/yolo-bean/p/7909482.html
- 绘制路径
- moveTo和lineTo配合绘制线条路径
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
ctx.beginPath();
ctx.moveTo(400,400);//把路径移动到画布中的指定点,不创建线条
ctx.lineTo(200,200);//添加一个新点,然后在画布中创建从该点到最后指定点的线条
ctx.closePath();
ctx.lineWidth=5;
ctx.strokeStyle='green';
ctx.stroke();//绘制已定义的路径
} - rect(x,y,width,height)绘制矩形路径(空心或者实心,whatever)
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
ctx.beginPath();
ctx.rect(50,50,100,100);
ctx.closePath();
/*ctx.strokeStyle='green';
ctx.stroke();//绘制已定义的路径,空心*/
ctx.fillStyle='green';
ctx.fill();//绘制已定义的路径,实心,即填充法
} - arc(x,y,半径,起始角度,结束角度,[布尔值,false=顺时针,true=逆时针])绘制弧线路径,用于创建圆或部分圆(http://www.w3school.com.cn/tags/canvas_arc.asp)
示例代码:function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
ctx.beginPath();
ctx.arc(100,100,50,0,1.5*Math.PI);
ctx.closePath();
ctx.strokeStyle='green';
ctx.stroke();//绘制已定义的路径,空心
/*ctx.fillStyle='green';
ctx.fill();//绘制已定义的路径,实心,即填充法*/
}效果图:(空心和实心)

- artTo(x1,y1,x2,y2,半径),参数是A,B两点坐标加半径,在画布上创建介于两个切线之间的弧线
*切线定理:一直线若与一圆有交点,且只有一个交点,那么这条直线就是圆的切线。几何上,切线指的是一条刚好触碰到曲线上某一点的直线
- moveTo和lineTo配合绘制线条路径
- 设置阴影
shadowBlur:阴影模糊值(值越大越模糊)
shadowColor:阴影颜色
shadowOffsetX:X方向的偏移
shadowOffsetY:Y方向的偏移示例代码:
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
// 设置阴影
ctx.shadowBlur=4;
ctx.shadowColor="#000";
ctx.shadowOffsetX=5;//不带单位,可以设置负值
ctx.shadowOffsetY=8;
//绘制文本
ctx.fillStyle='green';
ctx.font="bold 16px '微软雅黑'";
ctx.textBaseline='top';
ctx.fillText('还要多久才能接近你',100,100);
} - 控制填充风
CanvasGradient - 渐变填充
CanvasPattern - 元素重复填充- createLinearGradient()渐变填充,有两个参数,分别是开始坐标和结束坐标(http://www.w3school.com.cn/tags/canvas_createlineargradient.asp)
渐变填充步骤
1、ctx.createLinearGradient(x,y,xend,yend)返回CanvasGradient对象
2、调用CanvasGgradient对象的addColorStop(offset,color)方法向线性渐变中添加颜色,offset值在0~1之间
3、将CanvasGradient对象复制给ctx.fillStyle或者ctx.strokeStyle属性示例js代码:
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
//渐变
var gred=ctx.createLinearGradient(0,0,0,200);//这里是基于画布的坐标,而不是绘制的矩形的坐标
gred.addColorStop(0,'red');
gred.addColorStop(0.5,'green');
gred.addColorStop(1,'blue');
ctx.fillStyle=gred;
ctx.fillRect(0,0,200,200);
}效果图【恶心人的配色】:

- createRadialGradient()放射状填充,有六个参数,分别是开始圆的坐标,半径,结束圆的坐标,半径;
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
//渐变
var gred=ctx.createRadialGradient(100,100,5,100,100,100);
gred.addColorStop(0,'red');
gred.addColorStop(0.5,'green');
gred.addColorStop(1,'blue');
ctx.fillStyle=gred;
ctx.fillRect(0,0,200,200);
}效果图【纠结要不要换色】:

示例代码2:给圆加放射状渐变
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
var gred=ctx.createRadialGradient(200,200,5,200,200,100);
gred.addColorStop(0,'red');
gred.addColorStop(0.5,'green');
gred.addColorStop(1,'blue');
ctx.beginPath();
ctx.arc(200,200,100,0,2*Math.PI);
ctx.closePath();
ctx.fillStyle=gred;
ctx.fill();
} createPattern()在指定的方向上重复指定的元素,参数是要重复的元素和重复方法(repeat(default)|repeat-x|repeat-y|no-repeat)
示例代码:function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
var img=document.getElementById("lamp");
var pat=ctx.createPattern(img,"repeat");
ctx.rect(0,0,150,100);
ctx.fillStyle=pat;
ctx.fill();
}
- createLinearGradient()渐变填充,有两个参数,分别是开始坐标和结束坐标(http://www.w3school.com.cn/tags/canvas_createlineargradient.asp)
- drawImage()在画布上绘图(http://www.w3school.com.cn/tags/canvas_drawimage.asp)
*一定要放在onload方法内进行绘图在画布上定位图像:context.drawImage(img,x,y)
在画布上定位图像,并规定图像的宽度和高度:context.drawImage(img,x,y,width,height);
剪切图像,并在画布上定位被剪切的部分:context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); sx,sy开始裁剪位置,swidth,sheight裁剪图片的宽高示例代码:
function init(){
var can=document.getElementById('can1');
var ctx=can.getContext('2d');
var img=new Image();
img.src='images/0.jpg';
img.onload=function(){
//1、画原图大小
ctx.drawImage(img,0,0);//图片放置坐标
//2、缩放
ctx.drawImage(img,200,0,50,50);//图片放置坐标以及缩放为50*50大小的图片
//3、裁剪
ctx.drawImage(img,0,0,50,50,0,200,100,100);//从0,0开始截取,截取图像宽高为50*50,放置在画布0,200处,再将截取的图片放大为100*100的图片
}
} - 五子棋实例
1、判断鼠标点击棋盘定位
//计算棋盘和屏幕左边的距离
var leftOffset=(screen.width-600)/2;
// 棋盘从(0,0)开始
var x=e.clientX-leftOffset;
var y=e.clientY-10;//因为我定义了margin-top为10px 2、js取整函数
parseInt(7/2):丢弃小数部分,保留整数部分
Math.ceil(7/2):向上取整,有小数就整数部分加1
Math.round(7/2):四舍五入
Math.floor(7/2):向下取整
http://www.w3school.com.cn/tags/canvas_drawimage.asp
03_HTML Canvas第一天的更多相关文章
- canvas第一天
第一次接触canvas,<canvas></canvas>是html5出现的新标签,IE9开始支持,像所有的dom对象一样它有自己本身的属性.方法和事件,其中就有绘图的方法,j ...
- 初学 Canvas <第一篇-基础篇>
本文摘自:兴趣部落大神(为你一生画眉)-讲一讲canvas究竟是个啥? HTML5 的标准已经出来好久了,但是似乎其中的 Canvas 现在并没有在太多的地方用到.一个很重要的原因是,Canvas 的 ...
- canvas 基础知识整理(二)
html部分: <canvas id="myCanvas" width="800" height="800" ></can ...
- 用Canvas做动画
之前看过不少HTML5动画的书,讲解的是如何去做,对于其中的数学原理讲解的不详细,常有困惑.最近看的<HTML5+JavaScript 动画基础>这个是译本,Keith Peters曾写过 ...
- Android canvas.save()与canvas.restore()的使用总结
含义canvas.save(); 画布将当前的状态保存canvas.restore(); 画布取出原来所保存的状态使用 canvas.save();与canvas.restore();一般结合使用,. ...
- canvas实现平铺水印
欲实现的水印平铺的效果图如下: 从图上看,应该做到以下几点: 文字在X和Y方向上进行平铺: 文字进行了一定的角度的旋转: 水印作为背景,其z-index位置应位于页面内容底部, 即不能覆盖页面主内容: ...
- turnjs fabricjs canvas 翻书
最近做了一个翻书效果的项目, 来总结一下实现过程和遇到的一些问题, 供自己以后快速解决问题, 希望也能帮到同样遇到此类问题的同学, 如果有更好的方法,希望你能分享给我git地址 插件: Turn.js ...
- HTML5资料
1 Canvas教程 <canvas>是一个新的用于通过脚本(通常是JavaScript)绘图的HTML元素.例如,他可以用于绘图.制作图片的组合或者简单的动画(当然并不那么简单).It ...
- Android探究之View的绘制流程
Android中Activity是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当Activity启动时,我们会通过setContentView方法来设置一个内容视图 ...
随机推荐
- Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- React Native分享第三方遇到的问题
这几天做APP的分享,好多东西都不懂,踩了好多坑,所幸现在做好了,开心^_^ 时间紧,随便记一下先. 1.签名文件要和各平台的签名一致 2.新浪微博和微信的分享要打包之后,加上签名了才可以(我一直不知 ...
- uboot引导linux内核过程详解【转】
http://blog.chinaunix.net/uid-7828352-id-4472376.html 写的不错,尤其是uboot向linux内核传递参数的过程写的比较详细.
- LVS集群之工作原理和调度算法(2)
LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...
- Vijos-P1057题解
题目如下: https://www.vijos.org/p/1057 思路分析: 输入文件第一行为两个整数n,m(1<=n,m<=1000),接下来n行,每行m个数字,用空格隔开.0表示该 ...
- weui中的日期选择控件关于时间段的设置!
近日用到了日期控件,但是需要把时和分去掉,功能上是做一个预约的功能,所以只需要在年月日后面提供时间段的选择. BUG在于如果第一次点开弹框而没做任何操作,然后点了其他任意区域则弹框关闭,甚至你的8:0 ...
- Android热修复框架汇总整理(Hotfix)
Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix ...
- isupper()函数
isupper()函数可以用来判断字符c是否为大写英文字母! 原型:extern int isupper(int c); 头文件:ctype.h 功能:判断字符c是否为大写英文字母 说明:当参数c为大 ...
- 2017ecjtu-summer training #4 UESTC 1584
此题链接 http://acm.uestc.edu.cn/#/problem/show/1584 此题和hdu1541几乎完全一样,我们要先对坐标排序,再进行操作. hdu1541题解 http:// ...
- Spark环境搭建(下)——Spark安装
1. 下载Spark 1.1 官网下载Spark http://spark.apache.org/downloads.html 打开上述链接,进入到下图,点击红框下载Spark-2.2.0-bin-h ...