h5的canvas画布常用方法

首先canvas是有默认的宽度和高度,不可以在CSS样式中设置高端和宽度,否则会按照比例来缩放,一般都是在JS中设置宽度和高度;

下面用一个例子介绍;

<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
body{
background:#303B52;
}
canvas{
background: white;
/*width: 500px;
height: 500px;*/
/*不能在这里加,因为会默认帮你比例,因此在JS里赋予*/

}
</style>
</head>
<body>
<canvas id="bd">
<span>sf</span>
</canvas>
</body>
<script>
var sg=document.querySelector('#bd');
sg.width=400;
sg.height=400;
var ge=sg.getContext('2d');
//绘制矩形
    ge.fillStyle='red';   //填充颜色
    ge.fillRect(50,50,100,100); //x y轴坐标 宽度  高度   默认黑色
    ge.strokeStyle='blue';//边框的颜色
    ge.lineWidth='5';   //边框的大小
    ge.strokeRect(50.5,50.5,100,100); //边框
//绘制路径
ge.beginPath();//开始执行
ge.moveTo(100,100); //开始的位置
ge.lineTo(200,200);//第二个位置
ge.lineTo(150,300);//第三个位置
ge.closePath();//起点到终点的连接闭合
ge.stroke();//绘制一条线
ge.lineWidth='5';   //边框的大小
ge.strokeStyle='brown';//边框的颜色
ge.lineCap='round';  //线的断点样式,round为圆角,spuare 出来的长度为宽度一半10px。

//绘制圆形

制圆弧(arc)(重点)

· 概述:arc() 方法创建弧/曲线(用于创建圆或部分圆)。

语法:ctx.arc(x,y,r,sAngle,eAngle,counterclockwise);

解释:

 x,y:圆心坐标。

r:半径大小。

 sAngle:绘制开始的角度。 圆心到最右边点是0度,顺时针方向弧度增大。

 eAngel:结束的角度,注意是弧度。π

 counterclockwise:是否是逆时针。true是逆时针,false:顺时针

 弧度和角度的转换公式: rad = deg*Math.PI/180;

 Math提供的方法中sincos等都使用的弧度 

ge.arc(200,200,150,0,-360*Math.PI/180,true);
ge.stroke(); 连成线


ge.moveTo(200,200);
ge.arc(200,200,150,90*Math.PI/180,90*Math.PI/180,false);
ge.stroke(); 连成线

//渐变色
var grd=ge.createLinearGradient(150,100,150,300);  //起点坐标 终点坐标
grd.addColorStop(0,'red');  //位置和颜色
grd.addColorStop(0.5,'green');
grd.addColorStop(1,'blue');

ge.fillStyle=grd;
ge.fillRect(100,100,200,200);

//文字

ge.fillStyle='red';//内容颜色
ge.lineWidth=2;//描边大小
ge.strokeStyle='blue';//改变描边颜色
ge.font='60px 宋体';//改变样式
ge.textBaseline='top';//改变基点
ge.fillText('文字在干吗',0,0);//填写内容 坐标位置
ge.strokeText('文字',0,0);//描边 填写哪个就描边哪个 坐标位置


ge.shadowOffsetX=10; //x轴坐标
ge.shadowOffsetY=10; //y轴坐标
ge.shadowBlur=1;  //模糊宽度
ge.shadowColor='#d8d8d8'; //模糊颜色

3.4 变换(重点)

3.4.1 缩放(重点)

Ø scale() 方法缩放当前绘图,更大或更小

Ø 语法:context.scale(scalewidth,scaleheight)

n scalewidth  :  缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)

n scaleheight :  缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%, etc.)

Ø 注意:缩放的是整个画布,缩放后,继续绘制的图形会被放大或缩小。

3.4.2 位移画布(重点)

Ø translate() 方法重新映射画布上的 (0,0) 位置

Ø 语法:context.translate(x,y)

n  x:   添加到水平坐标(x)上的值

n  y:   添加到垂直坐标(y)上的值

Ø 注意:发生位移后,相当于把画布的0,0坐标 更换到新的x,y的位置,所有绘制的新元素都被影响。

3.4.3 旋转(重点)

Ø rotate() 方法旋转当前的绘图

Ø 语法:context.rotate(angle)

n  angle:   参数是弧度PI

注意:如需将角度转换为弧度,请使用 degrees*Math.PI/180 公式进行计算。

3.4.4 绘制环境保存和还原(重要)

Ø context.save() 保存当前环境的状态(可以把当前绘制环境进行保存到缓存中)

Ø context.restore() 返回之前保存过的路径状态和属性(获取最近缓存的ctx)

注意:一般配合位移画布使用。

3.4.5 设置绘制环境的透明度(了解)

Ø context.globalAlpha=number;

n number:透明值。必须介于 0.0(完全透明)与 1.0(不透明) 之间。

注意:设置透明度是全局的透明度的样式。注意是全局的。    

</script>
</html>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 canvas 的撤销操作可以利用栈的数据结构来存储每一步的绘制操作,然后在进行撤销时弹栈顶元素,重新绘制画布。以下是一个简单的示例代码: ```html <canvas id="myCanvas" width="500" height="500"></canvas> <button onclick="undo()">撤销</button> ``` ```javascript var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); var undoStack = []; // 绘制线条 function drawLine(x1, y1, x2, y2) { ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke(); } // 监听鼠标事件 canvas.addEventListener('mousedown', function(e) { var startX = e.offsetX; var startY = e.offsetY; canvas.addEventListener('mousemove', onMouseMove); // 鼠标弹起时,将当前绘制操作存入栈 canvas.addEventListener('mouseup', function() { canvas.removeEventListener('mousemove', onMouseMove); undoStack.push(ctx.getImageData(0, 0, canvas.width, canvas.height)); }); function onMouseMove(e) { var endX = e.offsetX; var endY = e.offsetY; drawLine(startX, startY, endX, endY); startX = endX; startY = endY; } }); // 撤销操作 function undo() { if (undoStack.length > 0) { // 弹栈顶元素 undoStack.pop(); // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 重新绘制 if (undoStack.length > 0) { ctx.putImageData(undoStack[undoStack.length - 1], 0, 0); } } } ``` 在这个示例中,我们使用了 `getImageData()` 方法将当前画布的像素数据存储到栈中,在撤销操作时,我们从栈中弹栈顶元素,并使用 `putImageData()` 方法重新绘制画布。需要注意的是,当栈为空时不能进行撤销操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值