118 lines
2.6 KiB
JavaScript
118 lines
2.6 KiB
JavaScript
/**
|
|
* 根据位置获取这个点在图表的哪个轴线上
|
|
* @param offsetX
|
|
* @param offsetY
|
|
*/
|
|
export function getXAxisAndYAxisByPosition(chart, offsetX, offsetY, seriesIndex = 0) {
|
|
const pointInPixel = [offsetX, offsetY]
|
|
if (
|
|
chart.containPixel(
|
|
{
|
|
seriesIndex
|
|
},
|
|
pointInPixel
|
|
)
|
|
) {
|
|
const [xAxis, yAxis] = chart.convertFromPixel({ seriesIndex }, pointInPixel)
|
|
return [xAxis, yAxis]
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* 将图表导出为图片
|
|
* @param {import("echarts").ECharts} chartInstance
|
|
* @param {'png' | 'jpeg' | 'svg'} type
|
|
*/
|
|
export function exportEchartImg(chartInstance, type = 'png', backgroundColor = '#022024') {
|
|
const dataURL = chartInstance.getDataURL({
|
|
type,
|
|
pixelRatio: 2,
|
|
backgroundColor
|
|
});
|
|
|
|
const link = document.createElement('a')
|
|
link.style.display = 'none'
|
|
link.href = dataURL
|
|
link.setAttribute('download', 'export.png')
|
|
document.body.appendChild(link)
|
|
link.click()
|
|
document.body.removeChild(link) //下载完成移除元素
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 按份数分割轴线
|
|
* @param {Number} max
|
|
* @param {Number} min
|
|
* @param {Number} cnt
|
|
* @param {Number} maxBoundaryGap
|
|
*/
|
|
export function splitAxis(max, min, cnt, maxBoundaryGap = 1.1) {
|
|
const _min = Math.floor(min)
|
|
const interval = Math.ceil((Math.ceil(max * maxBoundaryGap) - _min) / cnt)
|
|
const _max = _min + interval * cnt
|
|
|
|
return {
|
|
min: _min,
|
|
interval,
|
|
max: _max
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 构建线形series
|
|
* @param {*} name
|
|
* @param {*} data
|
|
* @param {*} color
|
|
* @param {*} extra
|
|
* @returns
|
|
*/
|
|
export function buildLineSeries(name, data, color, extra = {}) {
|
|
return {
|
|
name,
|
|
type: 'line',
|
|
data,
|
|
itemStyle: {
|
|
color
|
|
},
|
|
lineStyle: {
|
|
width: 1
|
|
},
|
|
symbol: 'none',
|
|
symbolSize: 1,
|
|
emphasis: {
|
|
disabled: true
|
|
},
|
|
animation: false,
|
|
...extra
|
|
}
|
|
}
|
|
|
|
// 根据name查找series
|
|
export function findSeriesByName(series, seriesName) {
|
|
return series.find(item => item.name == seriesName)
|
|
}
|
|
|
|
/**
|
|
* 限定数字在一定范围
|
|
* @param {Number} min
|
|
* @param {Number} max
|
|
* @returns {(num: number) => number }
|
|
*/
|
|
export function rangeNumber(min, max) {
|
|
return num => {
|
|
return num > max ? max : num < min ? min : num
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取图表某条轴线的最大值
|
|
* @param {import("echarts").ECharts} chartInstance
|
|
* @param {'xAxis' | 'yAxis'} axis
|
|
* @returns
|
|
*/
|
|
export function getAxisMax(chartInstance, axis) {
|
|
return chartInstance.getModel().getComponent(axis).axis.scale.rawExtentInfo._dataMax
|
|
} |