JS canvas总结

canvas

一、基本用法

**< canvas width=“200” height=“200” >< / canvas>

<body οnlοad="draw()">
	<canvas id="canvas" width="200" height="200" >
		浏览器不支持才显示这段文字
	</canvas>
	
	<script>
		function draw(){
			var canvas=document.getElementById("canvas");
			if(canvas.getContext)
			{
				var ctx=canvas.getContext('2d');
				语句;
			}
			else
			{
			}
		}
	</script>
< /body>

getContext:用来看浏览器是否支持canvas ,支持了里面的代码才起作用,不支持就显示else里面的代码.

二、2D上下文

1、填充和描边

(1)fillStyle 和 strokeStyle:该属性写的是绘制的颜色。

(2)fillRect 和 strokeStyle:最后绘制矩形
fillRect(x,y,width,height):距离左上角的上边 x px,左边 y px,width,height

clearRect:清除矩形

			var canvas=document.getElementById("canvas");
			if(canvas.getContext)
			{
				var ctx=canvas.getContext('2d');

				ctx.fillStyle="red";
				ctx.fillRect(30,30,100,100);
			}

2、绘制路径

变量 . beginPath():开始绘制路径
==arc(x,y,radius,startAngle,EndAngle,是否按逆时针方向计算):==开始角度为0时时三点钟方向,最后一个值为true或false,true:逆时针,false:顺时针
moveTo(x,y):直接移动到(x,y),不绘制路径
lineTo(x,y):绘制直线到(x,y)

画完之后,可以用如下属性:
closePath():末尾连接到起点
fill():用fillStyle填充它
stroke():用strokeStyle描边
clip():在路径上创建一个剪切区域

3、绘制文本(fillText、strokeText)

fillText(要绘制的文本字符串,x,y,可选的最大像素宽度);


var ctx=canvas.getContext('2d');

if(ctx.strokeText)
{
	ctx.font=" bold 15px Arial";
	//textAlign="start,end,left,right,center(建议用前两个值)"
	ctx.textAlign="center";
	//textBaseline="top,hanging,middle,alphabetic,ideograohic,bottom"
	ctx.textBaseline="middle";
	ctx.fillText("12",100,20);
}
else{
	alert("你的浏览器不支持strokeText");
}

在这里插入图片描述
measureText():接受一段字符串,返回的是字符串的宽度

4、变换(通过上下文变换,把处理后的图像绘制在画布上)

方法:
(1)rotate(角度):围绕原点旋转这么多角度
(2)scale(scaleX,scaleY):缩放图像,在X方向乘以scaleX,在Y方向乘以scaleY
(3)translate(x,y):将坐标原点移动到x,y
(4)transfrom(值):直接改变矩阵
在这里插入图片描述

window.onload = function(){
    var drawing = document.getElementById("drawing");
            
    //make sure <canvas> is completely supported
    if (drawing.getContext){
            
    var context = drawing.getContext("2d");
                
    //start the path
    context.beginPath();
                
    //draw outer circle
    context.arc(100, 100, 99, 0, 2 * Math.PI, false);
                
    //draw inner circle
    context.moveTo(194, 100);
    context.arc(100, 100, 94, 0, 2 * Math.PI, false);

    //move center to (100,100)
    context.translate(100, 100);
    context.rotate(1);
                
     //draw minute hand
     context.moveTo(0,0);
     context.lineTo(0, -85);
                
     //draw hour hand
     context.moveTo(0, 0);
     context.lineTo(-65, 0);
                
      context.stroke();
            }                
};

5、绘制图像

变量 . drawImage(图片,x,y,width,height);

6、阴影

shadowColor:阴影颜色
shadowOffsetX:x轴的偏移量
shadowOffsetY:y轴的偏移量
shadowBlur:模糊的像素
在这里插入图片描述

context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur    = 4;
context.shadowColor   = "rgba(0, 0, 0, 0.5)";            
            
//draw a red rectangle
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
            
//draw a blue rectangle
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);

7、渐变

(1)创建线性渐变

变量 . createLinearGradient(起点的x,起点的y,终点的x,终点的y);:创建渐变对象
addColorStop(0-1一个数,“颜色”);:添加颜色
然后用 fillStyle=grandient;
最后 fillRect(x,y,width,height);
在这里插入图片描述

gradient = context.createLinearGradient(30, 30, 70, 70);

gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");

context.fillStyle = gradient;
context.fillRect(50, 50, 50, 50);

(2)创建径向渐变
createRadiaGradient(圆心1x,圆心1y,半径1,圆心2x,圆心1y,半径2);
在这里插入图片描述

gradient = context.createRadialGradient(55, 55, 10, 55, 55, 30);

gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");

context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);

8、模式(重复的图像)

变量 . createPattern(图片,“repeat”);

9、使用图像数据

. getImageData(x,y,width,height);

10、合成

globalAlpha和globaCompositeOperation
(1)globalAlpha:是一个介于0~1之间的数,表示的是透明度
(2)globaCompositeOperation:表示会之后的图像怎么与先绘制的图像结合。

值:

source-over: 默认。在目标图像上显示源图像。
source-atop :在目标图像顶部显示源图像。
source-in: 在目标图像中显示源图像。
source-out :在目标图像之外显示源图像。
destination-over :在源图像上方显示目标图像。
destination-atop :在源图像顶部显示目标图像。
destination-in :在源图像中显示目标图像。
destination-out :在源图像外显示目标图像。
lighter: 显示源图像 + 目标图像。
copy :显示源图像。忽略目标图像。
xor :使用异或操作对源图像与目标图像进行组合。
这里是引用

三、WebGL

WebGL是针对Canvas的3D上下文。

1、类型化数组

1、视图
ArrayBuffer(数组缓冲类型),最常见的是DataView
DataView(ArrayButter,字节偏移量,要选择的字数);
2、WebGL上下文
clearColor():在WebGL之前,一般都会用某种实色清除< canvas>,该属性接受四个参数,分别为红、绿、蓝、透明度
3、视口与坐标
viewport(x,y,width,height);
4、缓冲区
创建缓冲区:createBuffer();
5、错误
WebGL一般不会报错,知道是否报错,可以用gl . getError()
6、着色器
有顶部着色器和片段着色器。使用GLSL编写
7、纹理
调用gl . createTexture()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用JavaScript创建一个canvas元素,可以按照以下步骤进行操作: 1. 在HTML中创建一个canvas标签,设置id、width和height属性,例如: ``` <canvas id="myCanvas" width="300" height="150"></canvas> ``` 2. 在JavaScript中获取canvas元素的引用,使用`document.querySelector`方法,通过id选择器选择canvas元素,例如: ``` var canvas = document.querySelector("#myCanvas"); ``` 3. 检查浏览器是否支持canvas,可以使用`canvas.getContext`方法来判断是否存在getContext方法,例如: ``` if(canvas.getContext){ // 执行绘图操作 // 可以通过canvas.getContext("2d")获取绘图上下文对象 var ctx = canvas.getContext("2d"); } else { // 浏览器不支持canvas } ``` 4. 获取到绘图上下文对象`ctx`后,就可以使用它进行绘图操作了。例如,可以使用`ctx.fillRect(x, y, width, height)`方法来绘制填充矩形,其中x和y表示矩形的左上角坐标,width和height表示矩形的宽度和高度。 总结起来,使用JavaScript创建canvas的基本步骤是:先在HTML中创建canvas标签,然后通过JavaScript获取canvas元素的引用,并判断浏览器是否支持canvas,最后使用绘图上下文对象进行绘图操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [js-canvas基本介绍](https://blog.csdn.net/qq_30627241/article/details/105819932)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [【功能实现】html2canvas.js 0.4.1版本使用demo(html转canvas并下载图片)](https://blog.csdn.net/weixin_43574035/article/details/126051125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值