1- import React , { PureComponent } from 'react' ;
2- import PropTypes from 'prop-types' ;
3- import debounce from 'lodash.debounce' ;
4- import throttle from 'lodash.throttle' ;
5-
6- import './style.scss' ;
1+ import React , { PureComponent } from "react" ;
2+ import PropTypes from "prop-types" ;
3+ import debounce from "lodash.debounce" ;
4+ import throttle from "lodash.throttle" ;
75
6+ import "./style.scss" ;
87
98const propTypes = {
109 // Image
@@ -21,7 +20,7 @@ const propTypes = {
2120 mgWidth : PropTypes . number ,
2221 mgHeight : PropTypes . number ,
2322 mgBorderWidth : PropTypes . number ,
24- mgShape : PropTypes . oneOf ( [ ' circle' , ' square' ] ) ,
23+ mgShape : PropTypes . oneOf ( [ " circle" , " square" ] ) ,
2524 mgShowOverflow : PropTypes . bool ,
2625 mgMouseOffsetX : PropTypes . number ,
2726 mgMouseOffsetY : PropTypes . number ,
@@ -31,9 +30,9 @@ const propTypes = {
3130
3231const defaultProps = {
3332 // Image
34- width : ' 100%' ,
35- height : ' auto' ,
36- className : '' ,
33+ width : " 100%" ,
34+ height : " auto" ,
35+ className : "" ,
3736
3837 // Zoom image
3938 zoomImgSrc : null ,
@@ -43,7 +42,7 @@ const defaultProps = {
4342 mgWidth : 150 ,
4443 mgHeight : 150 ,
4544 mgBorderWidth : 2 ,
46- mgShape : ' circle' ,
45+ mgShape : " circle" ,
4746 mgShowOverflow : true ,
4847 mgMouseOffsetX : 0 ,
4948 mgMouseOffsetY : 0 ,
@@ -66,7 +65,7 @@ export default class Magnifier extends PureComponent {
6665 constructor ( props ) {
6766 super ( props ) ;
6867 if ( ! props . src ) {
69- throw Error ( ' Missing src prop' ) ;
68+ throw Error ( " Missing src prop" ) ;
7069 }
7170
7271 this . state = {
@@ -95,29 +94,29 @@ export default class Magnifier extends PureComponent {
9594 componentDidMount ( ) {
9695 // Add mouse/touch event listeners to image element (assigned in render function)
9796 // `passive: false` prevents scrolling on touch move
98- this . img . addEventListener ( ' mouseenter' , this . onMouseEnter , { passive : false } ) ;
99- this . img . addEventListener ( ' mousemove' , this . onMouseMove , { passive : false } ) ;
100- this . img . addEventListener ( ' mouseout' , this . onMouseOut , { passive : false } ) ;
101- this . img . addEventListener ( ' touchstart' , this . onTouchStart , { passive : false } ) ;
102- this . img . addEventListener ( ' touchmove' , this . onTouchMove , { passive : false } ) ;
103- this . img . addEventListener ( ' touchend' , this . onTouchEnd , { passive : false } ) ;
97+ this . img . addEventListener ( " mouseenter" , this . onMouseEnter , { passive : false } ) ;
98+ this . img . addEventListener ( " mousemove" , this . onMouseMove , { passive : false } ) ;
99+ this . img . addEventListener ( " mouseout" , this . onMouseOut , { passive : false } ) ;
100+ this . img . addEventListener ( " touchstart" , this . onTouchStart , { passive : false } ) ;
101+ this . img . addEventListener ( " touchmove" , this . onTouchMove , { passive : false } ) ;
102+ this . img . addEventListener ( " touchend" , this . onTouchEnd , { passive : false } ) ;
104103
105104 // Re-calculate image bounds on window resize
106- window . addEventListener ( ' resize' , this . calcImgBoundsDebounced ) ;
105+ window . addEventListener ( " resize" , this . calcImgBoundsDebounced ) ;
107106 // Re-calculate image bounds on scroll (useCapture: catch scroll events in entire DOM)
108- window . addEventListener ( ' scroll' , this . calcImgBoundsDebounced , true ) ;
107+ window . addEventListener ( " scroll" , this . calcImgBoundsDebounced , true ) ;
109108 }
110109
111110 componentWillUnmount ( ) {
112111 // Remove all event listeners
113- this . img . removeEventListener ( ' mouseenter' , this . onMouseMove ) ;
114- this . img . removeEventListener ( ' mousemove' , this . onMouseMove ) ;
115- this . img . removeEventListener ( ' mouseout' , this . onMouseMove ) ;
116- this . img . removeEventListener ( ' touchstart' , this . onMouseMove ) ;
117- this . img . removeEventListener ( ' touchmove' , this . onMouseMove ) ;
118- this . img . removeEventListener ( ' touchend' , this . onMouseMove ) ;
119- window . removeEventListener ( ' resize' , this . calcImgBoundsDebounced ) ;
120- window . removeEventListener ( ' scroll' , this . calcImgBoundsDebounced , true ) ;
112+ this . img . removeEventListener ( " mouseenter" , this . onMouseMove ) ;
113+ this . img . removeEventListener ( " mousemove" , this . onMouseMove ) ;
114+ this . img . removeEventListener ( " mouseout" , this . onMouseMove ) ;
115+ this . img . removeEventListener ( " touchstart" , this . onMouseMove ) ;
116+ this . img . removeEventListener ( " touchmove" , this . onMouseMove ) ;
117+ this . img . removeEventListener ( " touchend" , this . onMouseMove ) ;
118+ window . removeEventListener ( " resize" , this . calcImgBoundsDebounced ) ;
119+ window . removeEventListener ( " scroll" , this . calcImgBoundsDebounced , true ) ;
121120 }
122121
123122 onMouseEnter ( ) {
@@ -141,6 +140,12 @@ export default class Magnifier extends PureComponent {
141140 }
142141 }
143142
143+ onMouseOut ( ) {
144+ this . setState ( {
145+ showZoom : false ,
146+ } ) ;
147+ }
148+
144149 onTouchStart ( e ) {
145150 e . preventDefault ( ) ; // Prevent mouse event from being fired
146151
@@ -172,12 +177,6 @@ export default class Magnifier extends PureComponent {
172177 }
173178 }
174179
175- onMouseOut ( ) {
176- this . setState ( {
177- showZoom : false ,
178- } ) ;
179- }
180-
181180 onTouchEnd ( ) {
182181 this . setState ( {
183182 showZoom : false ,
@@ -212,12 +211,12 @@ export default class Magnifier extends PureComponent {
212211 const { mgOffsetX, mgOffsetY, relX, relY, showZoom } = this . state ;
213212
214213 // Show/hide magnifying glass (opacity needed for transition)
215- let mgClasses = ' magnifying-glass' ;
214+ let mgClasses = " magnifying-glass" ;
216215 if ( showZoom ) {
217- mgClasses += ' visible' ;
216+ mgClasses += " visible" ;
218217 }
219- if ( mgShape === ' circle' ) {
220- mgClasses += ' circle' ;
218+ if ( mgShape === " circle" ) {
219+ mgClasses += " circle" ;
221220 }
222221
223222 return (
@@ -226,7 +225,7 @@ export default class Magnifier extends PureComponent {
226225 style = { {
227226 width,
228227 height,
229- overflow : mgShowOverflow ? ' visible' : ' hidden' ,
228+ overflow : mgShowOverflow ? " visible" : " hidden" ,
230229 } }
231230 >
232231 < img // eslint-disable-line jsx-a11y/alt-text
@@ -238,28 +237,27 @@ export default class Magnifier extends PureComponent {
238237 onLoad = { ( ) => {
239238 this . calcImgBounds ( ) ;
240239 } }
241- ref = { ( e ) => {
240+ ref = { e => {
242241 this . img = e ;
243242 } }
244243 />
245- {
246- this . imgBounds
247- && (
248- < div
249- className = { mgClasses }
250- style = { {
251- width : mgWidth ,
252- height : mgHeight ,
253- left : `calc(${ relX * 100 } % - ${ mgWidth / 2 } px + ${ mgOffsetX } px - ${ mgBorderWidth } px)` ,
254- top : `calc(${ relY * 100 } % - ${ mgHeight / 2 } px + ${ mgOffsetY } px - ${ mgBorderWidth } px)` ,
255- backgroundImage : `url(${ zoomImgSrc || src } )` ,
256- backgroundPosition : `calc(${ relX * 100 } % + ${ mgWidth / 2 } px - ${ relX * mgWidth } px) calc(${ relY * 100 } % + ${ mgHeight / 2 } px - ${ relY * mgWidth } px)` ,
257- backgroundSize : `${ zoomFactor * this . imgBounds . width } % ${ zoomFactor * this . imgBounds . height } %` ,
258- borderWidth : mgBorderWidth ,
259- } }
260- />
261- )
262- }
244+ { this . imgBounds && (
245+ < div
246+ className = { mgClasses }
247+ style = { {
248+ width : mgWidth ,
249+ height : mgHeight ,
250+ left : `calc(${ relX * 100 } % - ${ mgWidth / 2 } px + ${ mgOffsetX } px - ${ mgBorderWidth } px)` ,
251+ top : `calc(${ relY * 100 } % - ${ mgHeight / 2 } px + ${ mgOffsetY } px - ${ mgBorderWidth } px)` ,
252+ backgroundImage : `url(${ zoomImgSrc || src } )` ,
253+ backgroundPosition : `calc(${ relX * 100 } % + ${ mgWidth / 2 } px - ${ relX *
254+ mgWidth } px) calc(${ relY * 100 } % + ${ mgHeight / 2 } px - ${ relY * mgWidth } px)`,
255+ backgroundSize : `${ zoomFactor * this . imgBounds . width } % ${ zoomFactor *
256+ this . imgBounds . height } %`,
257+ borderWidth : mgBorderWidth ,
258+ } }
259+ />
260+ ) }
263261 </ div >
264262 ) ;
265263 }
0 commit comments