目录
- 1. 含义
- 2. 方法说明
- 3. 绘制对号
- 4. 绘制聊天框
1. 含义
二次贝塞尔曲线是从起始点开始,通过控制点影响,最终到达终点的平滑曲线。
控制点虽然不在曲线上,但它决定了曲线的形状。
通过调整控制点的位置,可以改变曲线的弯曲方向和程度。
2. 方法说明
quadraticCurveTo(cp1x, cp1y, x, y)
方法通过指定的控制点(cp1x, cp1y)和终点(x, y)来绘制一条二次贝塞尔曲线。
起始点是调用此方法前当前路径中的最后一个点。
如果当前路径为空,需要先使用beginPath()和moveTo()方法来定义起始点。
- cp1x, cp1y:控制点的x和y坐标。控制点决定了曲线的弯曲方向和程度,但它本身并不在曲线上。
- x, y:曲线的终点的x和y坐标。
3. 绘制对号
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;">
您的浏览器不支持 HTML5 canvas 标签。
</canvas>
<script>
// 获取当前画布
var c = document.getElementById("myCanvas");
// 获取画笔
var ctx = c.getContext("2d");
// 开启新的路径
ctx.beginPath();
// 起始点
ctx.moveTo(20, 20);
// 控制点(20,100),终点(200,20)
ctx.quadraticCurveTo(20, 100, 200, 20);
// 绘制路径轮廓
ctx.stroke();
// 结束路径
ctx.closePath()
ctx.strokeStyle = 'red';
ctx.beginPath()
ctx.moveTo(20, 20);
ctx.lineTo(20, 100)
ctx.lineTo(200, 20)
ctx.stroke()
ctx.closePath()
</script>
</body>
</html>
4. 绘制聊天框
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<canvas id="c1" width="600" height="400" style="border:1px solid #d3d3d3;">
您的浏览器不支持 HTML5 canvas 标签。
</canvas>
<script>
var c1 = document.getElementById("c1")
if (c1.getContext) {
console.log("当前浏览器不支持Canvas,请下载最新的浏览器!")
}
var ctx = c1.getContext("2d")
ctx.beginPath()
ctx.moveTo(200, 300)
ctx.quadraticCurveTo(150, 300, 150, 200)
ctx.quadraticCurveTo(150, 100, 300, 100)
ctx.quadraticCurveTo(450, 100, 450, 200)
ctx.quadraticCurveTo(450, 300, 250, 300)
ctx.quadraticCurveTo(250, 350, 150, 350)
ctx.quadraticCurveTo(200, 350, 200, 300)
ctx.stroke()
ctx.closePath()
// 二次贝塞曲线就是固定三个点的方式绘制曲线
ctx.strokeStyle = 'red';
ctx.beginPath()
ctx.moveTo(200, 300) // 起点
ctx.lineTo(150, 300)
ctx.lineTo(150, 200)
ctx.lineTo(150, 100) // 这是第二个点,第一个点是上一个点
ctx.lineTo(300, 100)
ctx.lineTo(450, 100)
ctx.lineTo(450, 200)
ctx.lineTo(450, 300)
ctx.lineTo(250, 300)
ctx.lineTo(250, 350)
ctx.lineTo(150, 350)
ctx.lineTo(200, 350)
ctx.lineTo(200, 300)
ctx.stroke()
ctx.closePath()
</script>
</body>
</html>