canvas

canvas 简介

1 HTML5 的一个元素,有兼容性

2 canvas是一块画布,本质是一张图片

canvas用途

1 代替flash,做各种动态效果和小游戏

canvas的属性和方法

canvas:默认大小 300*150

线默认宽度1px; 默认颜色黑色。绘制线条的时候,坐标对准线条的中心,所以线条为默认的1px的时候画面中的线条会出现模糊的效果,所以线条的宽度最后为偶数

1 设置宽度和高度在标签中设置
 <canvas width='600' height='400'></canvas>
 var canvas = document.querySelector('canvas');
 var ctx = canvas.getContext('2d); // 拿到绘制的工具
 
1 绘制线
 ctx.moveTo(100,100) // 确定起始位置 (x,y)
 ctx.lineTo(300,100) // 绘制的路径 但是看不到 (x,y)
 /** 样式会继承,但后面的样式会覆盖之前的样式
 	解决这个问题,使用 ctx.beginPath()开始新的路径 
 */
 ctx.closePath(); // 自动闭合 如果画三角形,还用画两条边,使用自动闭合即可不用画第三条边
 ctx.lineWidth = 2   // 设置线条的宽度
 ctx.lineCap = 'butt|round|square' // 线两边的样式
 ctx.lineJoin = 'miter|round|bevel' //两条线拐点的样式
 ctx.strokeStyle = 'red' // 设置线条的颜色 /**  还可以传 #fff/rgb()/rgba()/渐变方案  **/
 ctx.stroke() // 描边 (ctx.fill() //填充  ctx.fillStyle = 'red' //填充颜色) 把路径描述出来
  /**
    ctx.fill() 填充规则:非0填充规则
    顺时针+1 逆时针-1
  */
  
  1.1 其他样式的线条
  ctx.setLineDash([5]); // 设置虚线 虚线的长度是5 ([5,10] 长度5 10 5 10 ..../[5,10,15] 长度5  	10 15 ....)
  ctx.getLineDash() //	获取虚线的长度,获取的不重复的每条线段的长度集合
  1.2 线条的渐变颜色
  ctx.
  
2 画布相关属性
canvas.width/height //画布宽/高
ctx.canvas.width/height //画布宽/高

3 矩形绘制相关
ctx.rect(10,10,200,100) // canvas中x坐标位置 y坐标位置 矩形宽和高
ctx.stroke()         
或者 ctx.strokeRect(10,10,200,100) / ctx.fillRect(10,10,200,100)
ctx.clearRect(10,10,10,10) // 清除矩形绘制内容 
 3.1 颜色渐变
  // 创建渐变方案 
 var linearGradient = ctx.createLinearGradient(100,100,400,100) // 起始x/y坐标;结束x/y坐标 确定坐标的长度和方向
 /** 0-1 相当于css中的0%-100% **/
 linearGradient.addColorStop(0,'red');
 linearGradient.addColorStop(0.5,'blue');
 linearGradient.addColorStop(1,'yellow);
 ctx.fillStyle = linearGradient;
 
 4 圆弧的绘制
 圆的整个弧度:2π
 圆的整个角度:360
 1角度 = π/180 弧度
  ctx.arc(40,40,20,0,Math.pI/3) // 圆心坐标x,y;圆的半径r;起始弧度;结束弧度;绘制方向(默认顺时针false/逆时针true)
  
 5 文本相关
 let text = 'hello';
 ctx.strokeText(text,100,100) // 文字内容,x位置,y位置   
 ctx.fillText(text,100,100)
 ctx.font = '40px 微软雅黑' // 文字大小 文字字体
 ctx.measureText(text).width // 获取文本宽度
 /** 文本对齐 定位的坐标默认在文本的左下角 
 	 文本的对齐方式都居于定位的坐标点
 **/
 ctx.textAlign = 'start'; // 左右对齐方式left(start) right(end) center
 ctx.textBaseline='alpha' // 上下对齐方式 bottom top middle
 
 6 图片
 	动态加载图片
        创建img元素,在内存中 一般用 6.2创建
  6.1	let img = document.createElement('img);
        img.src = '';
        // 图片加载完成
        img.onload = function(){}
  6.2   let img = new Image();
  		// 什么时候加载完成
  		/** onload事件写在 img.src 赋值前面的原因是
  			onload事件有兼容性问题,但不是代码本身的问题,在IE浏览器中,如果有缓存的情况下,在执行img.src之后就加载完成了,即不会在执行onload事件
  		**/
  	    img.onload = function(){
  	      // 第一种写法
           ctx.drawImage(image,0,0) // 画图片 
           		//图片对象 canvas中x坐标 、y坐标
           // 第二种写法
            ctx.drawImage(image,0,0,100,100,) 
            	//图片对象 canvas中x坐标 、y坐标 image图片的宽/高
           // 第三种写法
            ctx.drawImage(image,400,400,100,100,100,100,100,100);
            	// 图片对象; image图片上的x、y轴定位; 截取图片的尺寸 宽度、高度;canvas中x、y坐标 ; image绘制的大小
  	    };
  	    // 执行这句代码已经去加载了
        img.src = '';
 
 7 变形  translate rotate scale 变形写于绘制前
 	ctx.translate(100,100) //  注意:移动的是整个坐标系
 	ctx.rotate(Math.PI/3) // 使用的是弧度 移动60度 
 	// 默认的旋转中心是坐标轴的原点 旋转过后,坐标系也会旋转
 	ctx.scale(1,2) // x、y轴方向的缩放
 	// 整个坐标系大小的缩放 内容缩放 + 坐标系缩放
 	ctx.strokeRect(100,100,100,100);
 	
 8 ctx.save() // 保存相关的样式和变形,  多个保存情况下,取的时候先进后出原则
   ctx.restore() // 取保存的样式和变形
   let imageStyle = ctx.createPatter(img,'no-repeat')
   ctx.strokeStyle = imageStyle
   
 9 动画
 三种动画控制器
 使用setTimeout和setInterval可能会出现掉帧,而requestAnimationFrame不会出现掉帧 
1 setTimeout // 时间控制是自己设置控制的
2 setInterval // 时间控制是自己设置控制的
3 requestAnimationFrame // 时间控制是通过浏览器控制的
 参数函数:浏览器在绘制页面的过程中是有自己的频率 (fps)当浏览器绘制的时候,会通知函数执行
 fps 一般浏览器的帧 1s 60次绘制
requestAnimationFrame(function(){
    
})

 10 碰撞函数 isPointInPath
 判断点是否在某一个路径内
 ctx.isPointInPath(x,y) // x,y 点坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值