Browse Source

no message

feature/v2.3
xpz2018 4 years ago
parent
commit
e1c27f8a1f
1 changed files with 118 additions and 45 deletions
  1. 163
      xtends/libs/u-charts.js

163
xtends/libs/u-charts.js

@ -19,7 +19,7 @@
'use strict';
var config = {
version: 'v2.2.0-20210529',
version: 'v2.3.3-20210706',
yAxisWidth: 15,
yAxisSplit: 5,
xAxisHeight: 22,
@ -471,7 +471,7 @@ function getDataRange(minData, maxData) {
function measureText(text, fontSize, context) {
var width = 0;
text = String(text);
// #ifdef MP-ALIPAY || MP-BAIDU
// #ifdef MP-ALIPAY || MP-BAIDU || APP-NVUE
context = false;
// #endif
if (context !== false && context !== undefined && context.setFontSize && context.measureText) {
@ -920,6 +920,9 @@ function findRoseChartCurrentIndex(currentPoints, pieData, opts) {
if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
angle = -angle;
if(opts.extra.rose && opts.extra.rose.offsetAngle){
angle = angle - opts.extra.rose.offsetAngle * Math.PI / 180;
}
for (var i = 0, len = series.length; i < len; i++) {
if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._rose_proportion_ * 2 * Math.PI)) {
currentIndex = i;
@ -930,12 +933,18 @@ function findRoseChartCurrentIndex(currentPoints, pieData, opts) {
return currentIndex;
}
function findPieChartCurrentIndex(currentPoints, pieData) {
function findPieChartCurrentIndex(currentPoints, pieData, opts) {
var currentIndex = -1;
var series = getPieDataPoints(pieData.series);
if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
angle = -angle;
if(opts.extra.pie && opts.extra.pie.offsetAngle){
angle = angle - opts.extra.pie.offsetAngle * Math.PI / 180;
}
if(opts.extra.ring && opts.extra.ring.offsetAngle){
angle = angle - opts.extra.ring.offsetAngle * Math.PI / 180;
}
for (var i = 0, len = series.length; i < len; i++) {
if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._proportion_ * 2 * Math.PI)) {
currentIndex = i;
@ -1269,6 +1278,7 @@ function getRadarDataPoints(angleList, center, radius, series, opts) {
let tmp = {};
tmp.angle = angleList[index];
tmp.proportion = item / maxData;
tmp.value = item;
tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center);
listItem.data.push(tmp);
});
@ -1813,8 +1823,8 @@ function getYAxisTextList(series, opts, config, stack, yData) {
maxData += rangeSpan;
}
var dataRange = getDataRange(minData, maxData);
var minRange = yData.min === undefined ? dataRange.minRange : yData.min;
var maxRange = yData.max === undefined ? dataRange.maxRange : yData.max;
var minRange = yData.min === undefined || yData.min === null ? dataRange.minRange : yData.min;
var maxRange = yData.max === undefined || yData.min === null ? dataRange.maxRange : yData.max;
var range = [];
var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber;
for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
@ -1942,7 +1952,7 @@ function calTooltipYAxisData(point, series, opts, config, eachSpacing) {
let maxVal = ranges[i].shift();
let minVal = ranges[i].pop();
let item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid;
item = opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(Number(item)) : item.toFixed(0);
item = opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(item) : item.toFixed(0);
items.push(String(item))
}
return items;
@ -2350,7 +2360,7 @@ function drawMarkLine(opts, config, context) {
context.stroke();
context.setLineDash([]);
if (item.showLabel) {
let labelText = opts.yAxis.formatter ? opts.yAxis.formatter(Number(item.value)) : item.value;
let labelText = opts.yAxis.formatter ? opts.yAxis.formatter(item.value) : item.value;
context.setFontSize(config.fontSize);
let textWidth = measureText(labelText, config.fontSize, context);
let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[0].width;
@ -2659,18 +2669,11 @@ function drawColumnDataPoints(series, opts, config, context) {
columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
}
let [r0, r1, r2, r3] = columnOption.barBorderRadius;
if (r0 + r2 > height) {
r0 = height;
r2 = 0;
r1 = height;
r3 = 0;
}
if (r0 + r2 > width / 2) {
r0 = width / 2;
r2 = 0;
r1 = width / 2;
r3 = 0;
}
let minRadius = Math.min(width/2,height/2);
r0 = r0 > minRadius ? minRadius : r0;
r1 = r1 > minRadius ? minRadius : r1;
r2 = r2 > minRadius ? minRadius : r2;
r3 = r3 > minRadius ? minRadius : r3;
r0 = r0 < 0 ? 0 : r0;
r1 = r1 < 0 ? 0 : r1;
r2 = r2 < 0 ? 0 : r2;
@ -2733,19 +2736,43 @@ function drawColumnDataPoints(series, opts, config, context) {
context.setFillStyle(columnOption.meterFillColor);
var startX = item.x - item.width / 2;
var height = opts.height - item.y - opts.area[2];
context.moveTo(startX, item.y);
context.fillRect(startX, item.y, item.width, height);
context.closePath();
context.fill();
if (columnOption.barBorderCircle) {
var barBorderRadius = (item.width - columnOption.meterBorder*2) / 2;
if(barBorderRadius>height){
barBorderRadius = height;
}
context.moveTo(startX + columnOption.meterBorder, opts.height - opts.area[2]);
context.lineTo(startX + columnOption.meterBorder, item.y + barBorderRadius);
context.arc(startX + item.width/2, item.y + barBorderRadius, barBorderRadius, -Math.PI, 0);
context.lineTo(startX + item.width - columnOption.meterBorder , opts.height - opts.area[2]);
context.lineTo(startX, opts.height - opts.area[2]);
context.fill();
}else{
context.moveTo(startX, item.y);
context.fillRect(startX, item.y, item.width, height);
context.closePath();
context.fill();
}
//画边框线
if (columnOption.meterBorder > 0) {
context.beginPath();
context.setStrokeStyle(eachSeries.color);
context.setLineWidth(columnOption.meterBorder * opts.pix);
context.moveTo(startX + columnOption.meterBorder * 0.5, item.y + height);
context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + height);
if (columnOption.barBorderCircle) {
var barBorderRadius = (item.width - columnOption.meterBorder)/ 2;
if(barBorderRadius>height){
barBorderRadius = height;
}
context.moveTo(startX + columnOption.meterBorder * 0.5, opts.height - opts.area[2]);
context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + barBorderRadius);
context.arc(startX + item.width/2, item.y + barBorderRadius - columnOption.meterBorder * 0.5, barBorderRadius, -Math.PI, 0);
context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, opts.height - opts.area[2]);
}else{
context.moveTo(startX + columnOption.meterBorder * 0.5, item.y + height);
context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + height);
}
context.stroke();
}
}
@ -2758,10 +2785,23 @@ function drawColumnDataPoints(series, opts, config, context) {
context.setFillStyle(item.color || eachSeries.color);
var startX = item.x - item.width / 2;
var height = opts.height - item.y - opts.area[2];
context.moveTo(startX, item.y);
context.fillRect(startX, item.y, item.width, height);
context.closePath();
context.fill();
if (columnOption.barBorderCircle) {
var barBorderRadius = item.width / 2;
if(barBorderRadius>height){
barBorderRadius = height;
}
context.moveTo(startX, opts.height - opts.area[2]);
context.arc(startX + barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI, -Math.PI / 2);
context.arc(startX + item.width - barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI / 2, 0);
context.lineTo(startX + item.width, opts.height - opts.area[2]);
context.lineTo(startX, opts.height - opts.area[2]);
context.fill();
}else{
context.moveTo(startX, item.y);
context.fillRect(startX, item.y, item.width, height);
context.closePath();
context.fill();
}
}
};
}
@ -3617,18 +3657,11 @@ function drawMixDataPoints(series, opts, config, context) {
columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
}
let [r0, r1, r2, r3] = columnOption.barBorderRadius;
if (r0 + r2 > height) {
r0 = height;
r2 = 0;
r1 = height;
r3 = 0;
}
if (r0 + r2 > width / 2) {
r0 = width / 2;
r2 = 0;
r1 = width / 2;
r3 = 0;
}
let minRadius = Math.min(width/2,height/2);
r0 = r0 > minRadius ? minRadius : r0;
r1 = r1 > minRadius ? minRadius : r1;
r2 = r2 > minRadius ? minRadius : r2;
r3 = r3 > minRadius ? minRadius : r3;
r0 = r0 < 0 ? 0 : r0;
r1 = r1 < 0 ? 0 : r1;
r2 = r2 < 0 ? 0 : r2;
@ -3935,7 +3968,7 @@ function drawXAxis(categories, opts, config, context) {
});
} else {
newCategories.forEach(function(item, index) {
var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(Number(item)) : item;
var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item;
context.save();
context.beginPath();
context.setFontSize(xAxisFontSize);
@ -4855,6 +4888,42 @@ function drawRadarDataPoints(series, opts, config, context) {
});
// draw label text
drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
// draw dataLabel
if (opts.dataLabel !== false && process === 1) {
radarDataPoints.forEach(function(eachSeries, seriesIndex) {
context.beginPath();
var fontSize = eachSeries.textSize * opts.pix || config.fontSize;
context.setFontSize(fontSize);
context.setFillStyle(eachSeries.textColor || opts.fontColor);
eachSeries.data.forEach(function(item, index) {
//如果是中心点垂直的上下点位
if(Math.abs(item.position.x - centerPosition.x)<2){
//如果在上面
if(item.position.y < centerPosition.y){
context.setTextAlign('center');
context.fillText(item.value, item.position.x, item.position.y - 4);
}else{
context.setTextAlign('center');
context.fillText(item.value, item.position.x, item.position.y + fontSize + 2);
}
}else{
//如果在左侧
if(item.position.x < centerPosition.x){
context.setTextAlign('right');
context.fillText(item.value, item.position.x - 4, item.position.y + fontSize / 2 - 2);
}else{
context.setTextAlign('left');
context.fillText(item.value, item.position.x + 4, item.position.y + fontSize / 2 - 2);
}
}
});
context.closePath();
context.stroke();
});
context.setTextAlign('left');
}
return {
center: centerPosition,
radius: radius,
@ -6259,6 +6328,10 @@ var uCharts = function uCharts(opts) {
}
this.context.draw = function() {}
}
//兼容NVUEsetLineDash
if(!this.context.setLineDash){
this.context.setLineDash = function(e) {}
}
opts.chartData = {};
this.uevent = new uChartsEvent();
this.scrollOption = {
@ -6378,7 +6451,7 @@ uCharts.prototype.getCurrentDataIndex = function(e) {
return findPieChartCurrentIndex({
x: _touches$.x,
y: _touches$.y
}, this.opts.chartData.pieData);
}, this.opts.chartData.pieData, this.opts);
} else if (this.opts.type === 'rose') {
return findRoseChartCurrentIndex({
x: _touches$.x,

Loading…
Cancel
Save