Spline 样条曲线

获取Konva最新的信息

我们可以通过实例化一个 Konva.Line() 对象创建样条曲线,并且设置属性 tension 值。

我们使用 points 属性创建线的路径,如果线包含三个点(坐标:x, y),你需要这样定义 points 属性: [x1, y1, x2, y2, x3, y3]

之所以使用简单的一维数字数组,因为相对于对象(例如: [{x: 0, y: 0}, {x: 0, y: 0}])运行起来更快而且需要的内存也更少。

点击 Konva.Line documentation 查看详细属性和方法说明。

Konva Spline Demoview raw
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/konva@4.0.18/konva.min.js"></script>
<meta charset="utf-8" />
<title>Konva Line Spline Demo</title>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #f0f0f0;
}
</style>
</head>
<body>
<div id="container"></div>
<script>
var width = window.innerWidth;
var height = window.innerHeight;

var stage = new Konva.Stage({
container: 'container',
width: width,
height: height
});

var layer = new Konva.Layer();

var redLine = new Konva.Line({
points: [5, 70, 140, 23, 250, 60, 300, 20],
stroke: 'red',
strokeWidth: 15,
lineCap: 'round',
lineJoin: 'round',
tension: 1
});

// dashed line
var greenLine = new Konva.Line({
points: [5, 70, 140, 23, 250, 60, 300, 20],
stroke: 'green',
strokeWidth: 2,
lineJoin: 'round',
/*
* line segments with a length of 33px
* with a gap of 10px
*/
dash: [33, 10],
lineCap: 'round',
tension: 0.5
});

// complex dashed and dotted line
var blueLine = new Konva.Line({
points: [5, 70, 140, 23, 250, 60, 300, 20],
stroke: 'blue',
strokeWidth: 10,
lineCap: 'round',
lineJoin: 'round',
/*
* line segments with a length of 29px with a gap
* of 20px followed by a line segment of 0.001px (a dot)
* followed by a gap of 20px
*/
dash: [29, 20, 0.001, 20],
tension: 0.7
});

/*
* since each line has the same point array, we can
* adjust the position of each one using the
* move() method
*/
redLine.move({
x: 20,
y: 5
});
greenLine.move({
x: 20,
y: 55
});
blueLine.move({
x: 20,
y: 105
});

layer.add(redLine);
layer.add(greenLine);
layer.add(blueLine);

// add the layer to the stage
stage.add(layer);
</script>
</body>
</html>