antv G2 4.x 版本用registerComponent函数注册一个slider,并且能把handler变成圆形,也不会有houver效果出现举一个例子
时间: 2023-07-16 07:15:03 浏览: 162
以下是一个使用 registerComponent 函数注册一个 Slider 并将 handler 变为圆形的示例:
```javascript
import G2 from '@antv/g2';
G2.registerComponent('slider', {
// 初始化组件
init() {
const range = this.config.range;
const data = this.config.data;
const chart = this.config.chart;
const plotRange = chart.get('plotRange');
const width = plotRange.br.x - plotRange.bl.x;
const height = plotRange.br.y - plotRange.bl.y;
const slider = this.slider = chart.get('canvas').addGroup();
const track = slider.addShape('rect', {
attrs: {
x: 0,
y: 0,
width,
height,
fill: '#ccc',
opacity: 0.3
}
});
const handlerWidth = 16;
const handlerHeight = 16;
const handler = slider.addShape('rect', {
attrs: {
x: 0,
y: 0,
width: handlerWidth,
height: handlerHeight,
fill: '#fff',
stroke: '#333',
lineWidth: 1
}
});
// 将 handler 变为圆形
handler.attr({
r: handlerWidth / 2,
cx: handlerWidth / 2,
cy: handlerHeight / 2
});
// 绑定事件
slider.on('mousedown', ev => {
const x = ev.clientX - chart.get('el').getBoundingClientRect().left;
const percent = x / width;
const value = range[0] + percent * (range[1] - range[0]);
chart.filter('x', val => {
return val <= value;
});
chart.repaint();
});
// 鼠标悬停时不显示 hover 效果
handler.on('mouseenter', () => {
handler.attr('cursor', 'default');
});
slider.translate(plotRange.bl.x, plotRange.bl.y + height + 20);
// 绘制组件
this.render();
},
// 绘制组件
render() {
const range = this.config.range;
const data = this.config.data;
const chart = this.config.chart;
const handler = this.slider.getChildByIndex(1);
const percent = (data[0].x - range[0]) / (range[1] - range[0]);
const plotRange = chart.get('plotRange');
const width = plotRange.br.x - plotRange.bl.x;
// 更新 handler 的位置
handler.attr({
x: percent * width
});
}
});
// 创建图表
const chart = new G2.Chart({
container: 'mountNode',
width: 500,
height: 400
});
// 设置数据
const data = [
{ x: 1, y: 10 },
{ x: 2, y: 20 },
{ x: 3, y: 30 },
{ x: 4, y: 40 },
{ x: 5, y: 50 },
{ x: 6, y: 60 }
];
// 绘制折线图
chart.line().position('x*y').data(data);
// 添加 Slider 组件
chart.slider({
width: 400,
height: 10,
data,
range: [1, 6]
});
// 渲染图表
chart.render();
```
在这个例子中,我们使用 registerComponent 函数注册了一个 slider 组件,并且将 handler 变为圆形。同时,在 handler 上绑定了 mouseenter 事件,使其不显示 hover 效果。最后,我们在图表中添加了这个 Slider 组件,并渲染出了折线图和 Slider 组件。
阅读全文