@@ -66,6 +66,32 @@ export default function ListeningRect({
6666 } ;
6767
6868 function onMouseMove ( e : any ) {
69+ let sBrowser ;
70+ const sUsrAg = navigator . userAgent ;
71+ if ( sUsrAg . indexOf ( "Firefox" ) > - 1 ) {
72+ sBrowser = "Mozilla Firefox" ;
73+ // "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
74+ } else if ( sUsrAg . indexOf ( "SamsungBrowser" ) > - 1 ) {
75+ sBrowser = "Samsung Internet" ;
76+ // "Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G955F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36
77+ } else if ( sUsrAg . indexOf ( "Opera" ) > - 1 || sUsrAg . indexOf ( "OPR" ) > - 1 ) {
78+ sBrowser = "Opera" ;
79+ // "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106"
80+ } else if ( sUsrAg . indexOf ( "Trident" ) > - 1 ) {
81+ sBrowser = "Microsoft Internet Explorer" ;
82+ // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko"
83+ } else if ( sUsrAg . indexOf ( "Edge" ) > - 1 ) {
84+ sBrowser = "Microsoft Edge" ;
85+ // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
86+ } else if ( sUsrAg . indexOf ( "Chrome" ) > - 1 ) {
87+ sBrowser = "Chrome" ;
88+ // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36"
89+ } else if ( sUsrAg . indexOf ( "Safari" ) > - 1 ) {
90+ sBrowser = "Safari" ;
91+ // "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306"
92+ } else {
93+ sBrowser = "unknown" ;
94+ }
6995 const mousePosition = d3 . pointer ( e ) ;
7096 const hoveredX = xScale . invert ( mousePosition [ 0 ] ) ;
7197 const hoveredY = yScale . invert ( mousePosition [ 1 ] ) ;
@@ -88,8 +114,9 @@ export default function ListeningRect({
88114 const closestDataPoint = data [ closestXIndex ] ;
89115 closestXValue = xAccessor ( closestDataPoint ) ;
90116
91- tooltipState . cursorX =
92- e . nativeEvent . pageX - e . nativeEvent . layerX + xScale ( closestXValue ) ;
117+ tooltipState . cursorX = sBrowser === 'Chrome'
118+ ? e . nativeEvent . pageX - e . nativeEvent . layerX + xScale ( closestXValue )
119+ : e . nativeEvent . pageX - e . nativeEvent . offsetX + xScale ( closestXValue )
93120 }
94121
95122 // ****************************************
@@ -113,8 +140,10 @@ export default function ListeningRect({
113140 if ( typeof closestYIndex === 'number' ) {
114141 if ( typeof closestXIndex === 'number' ) {
115142 closestYValue = layers [ closestYIndex ] [ closestXIndex ] [ 1 ] ;
116- tooltipState . cursorY =
117- e . pageY - e . nativeEvent . layerY + yScale ( closestYValue ) ;
143+
144+ tooltipState . cursorY = sBrowser === "Chrome" ?
145+ e . pageY - e . nativeEvent . layerY + yScale ( closestYValue )
146+ : e . pageY - e . nativeEvent . offsetY + yScale ( closestYValue )
118147
119148 tooltipState . data = {
120149 [ xKey ] : closestXValue ,
0 commit comments