如图这样:,
最后总结一下我操作的方法:
//鼠标事件,mousedown/mousemove/mouseup
this.myChart.getZr().on("mousedown", (params) => {
//do something
//将params.offsetX,params.offsetY通过myChart.convertFromPixel方法转换成图表的x轴和y轴,就可以操作数据了
const axisData = this.myChart.convertFromPixel("grid", [
params.offsetX,
params.offsetY,
]);
});
//鼠标按下时
_this.myChart.getZr().on("mousedown", (params) => {
_this.mouseModifying = true;
//显示鼠标模拟线段
_this.showMouseLine(params);
});
//鼠标滑动时
_this.myChart.getZr().on("mousemove", (params) => {
if (_this.mouseModifying) {
_this.mouseMoveing = true;
//显示鼠标模拟线段
_this.showMouseLine(params);
}
});
// 鼠标拖拽事件 松开时
_this.myChart.getZr().on("mouseup", (params) => {
try {
if (_this.mouseModifying) {
const mouseData = _this.myChart.convertFromPixel("grid", [
params.offsetX,
params.offsetY,
]);
//x轴的下标
_this.mousedownXAxisPosition = mouseData[0];
...
}
_this.mouseModifying = false;
_this.mouseMoveing = false;
} catch (e) {
//鼠标作用点超出图表时
_this.mouseModifying = false;
_this.mouseMoveing = false;
}
});
let erd = elementResizeDetectorMaker();
erd.listenTo(document.getElementById("chart"), function (element) {
_this.$nextTick(function () {
_this.myChart.resize(); //变化重新渲染图
});
});
//显示鼠标线段
showMouseLine(params) {
const _this = this;
try {
//鼠标移动时
if (this.mouseMoveing) {
this.option.color.length = this.option.color.length - 1;
this.option.series.length = this.option.series.length - 1;
}
const mouseData = this.myChart.convertFromPixel("grid", [
params.offsetX,
params.offsetY,
]);
//超过图表外不操作数据
if (
mouseData[0] < 0 ||
mouseData[0] > 24 ||
mouseData[1] < this.yAxisTemperationMinValue ||
mouseData[1] > this.yAxisTemperationMaxValue
) {
return false;
}
...
} catch (e) {
//范围超出时
//console.log(e.message,e.stack);
if (e.message === "Invalid array length") {
_this.mouseModifying = false;
_this.mouseMoveing = false;
_this.isInputChange = false;
}
}
},
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
4 回答4.3k 阅读✓ 已解决
又是你,再给你个官方例子 https://echarts.apache.org/ex...
这是我之前做的相关功能,是柱状图,你可以参考下,里面很多东西你应该用不到,你自己精简下