Konva基本使用
konva是一个用canvas画2D图的JavaScript库,用与实现图形交互交互效果。关注GitHub,或直接下载。
下面直接上代码,画环图的主要步骤
创建舞台
// CDN使用<script src="https://unpkg.com/konva@2.4.2/konva.min.js"></script>// 获取容器宽度var width = 145// 获取容器高度var height = 145// konva.js的开始,初始化舞台var stage = new Konva.Stage({container: elem, //dom元素idwidth: width, // dom元素宽度height: height // dom元素高度});
创建图层
// 新建图层layervar layer = new Konva.Layer();
创建图案(还可以创建分组,将图案分组等)
/*** 初始化扇形* @param angle 扇形角度* @param rotation 开始角度* @param color 颜色* @return 扇形*/var initWedge = function(angle, rotation, color) {return new Konva.Wedge({x: width/2, // 横坐标y: height/2, // 纵坐标angle: angle, // 扇形角度rotation: rotation, // 旋转角度radius: width/2-15, // 扇形弧长fill: color, // 扇形颜色stroke: '#fff', // 边框颜色strokeWidth: 3 // 边框宽度});}/*** 初始化圆形* @param radius 弧长* @param color 颜色* @return 圆形*/var initCircle = function(radius, color) {return new Konva.Circle({x: width/2, // 横坐标y: height/2, // 纵坐标radius: radius, // 扇形弧长fill: color, // 扇形颜色})}
计算扇形的角度
// 这里以3个数据为例,allCount为总数,注意:处理总数为0的NAN情况var nofitRate = (nofitNum / allCount) * 360;var comfitRate = (comfitNum / allCount) * 360;var fitRate = (fitNum / allCount) * 360;
根据数据创建扇形
// 3个扇形对象,注意:后一个扇形的起点角度应该为已画扇形的角度总和var nofit = initRing(nofitRate, 0, '#f15959');var comfit = initRing(comfitRate, nofitRate, '#1a89b7');var fit = initRing(fitRate, comfitRate + nofitRate, '#6bd173');
圆心中间添加文字(可以略过)
// 添加文字var text = new Konva.Text({x: width / 2 - 37,y: height / 2 - 10,fontSize: 18,text: rate,fontFamily: 'MicrosoftYaHei',fill: '#6bd173',align: 'center', // 文字区域内居中width: 74 // 设置文字区域的宽度})layer.add(text);
将扇形添加到图层,将图层添加到舞台
// 将扇形和文字添加给舞台layer.add(nofit, comfit, fit, circle);// 将图层添加给舞台stage.add(layer);
