diff --git a/examples/mouse_move.html b/examples/mouse_move.html new file mode 100755 index 0000000..74ccd21 --- /dev/null +++ b/examples/mouse_move.html @@ -0,0 +1,29 @@ + + + + + + + + +
+ + + diff --git a/src/index.ts b/src/index.ts index f186d0f..a8552d0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import { ChartwerkPod, VueChartwerkPodMixin, TimeFormat, CrosshairOrientation, BrushOrientation, yAxisOrientation } from '@chartwerk/core'; -import { LineTimeSerie, LineOptions } from './types'; +import { LineTimeSerie, LineOptions, MouseObj } from './types'; import { Markers } from './components/markers'; import { Segments } from './components/segments'; @@ -290,18 +290,17 @@ class LinePod extends ChartwerkPod { return _.max(intervals); } - onMouseMove(): void { + getMouseObj(): MouseObj { const eventX = d3.mouse(this.chartContainer.node())[0]; const eventY = d3.mouse(this.chartContainer.node())[1]; const xValue = this.state.xScale.invert(eventX); // mouse x position in xScale const yValue = this.state.yScale.invert(eventY); - this.moveCrosshairLine(eventX, eventY); const datapoints = this.findAndHighlightDatapoints(xValue, yValue); - // TDOO: is shift key pressed + // TODO: is shift key pressed // TODO: need to refactor this object - this.options.callbackMouseMove({ + return { x: d3.event.pageX, y: d3.event.pageY, xVal: xValue, @@ -309,7 +308,21 @@ class LinePod extends ChartwerkPod { series: datapoints, chartX: eventX, chartWidth: this.width - }); + }; + } + + override onMouseMove(): void { + const obj = this.getMouseObj(); + this.moveCrosshairLine(obj.x, obj.y); + // TODO: is shift key pressed + // TODO: need to refactor this object + this.options.callbackMouseMove(obj); + } + + // TODO: add override + onMouseClick(): void { + const obj = this.getMouseObj(); + console.log(obj); } findAndHighlightDatapoints(xValue: number, yValue: number): { value: [number, number], color: string, label: string }[] { @@ -341,14 +354,14 @@ class LinePod extends ChartwerkPod { return points; } - onMouseOver(): void { + override onMouseOver(): void { this.onMouseMove(); this.crosshair.style('display', null); this.crosshair.selectAll('.crosshair-circle') .style('display', null); } - onMouseOut(): void { + override onMouseOut(): void { this.options.callbackMouseOut(); this.crosshair.style('display', 'none'); } diff --git a/src/types.ts b/src/types.ts index 5924894..379763f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,3 +11,13 @@ type LineTimeSerieParams = { export type LineTimeSerie = Serie & Partial; export type LineOptions = Options; + +export type MouseObj = { + x: number, + y: number, + xVal: number, + yVal: number, + series: { value: [number, number], color: string, label: string }[], + chartX: number, + chartWidth: number +} \ No newline at end of file