Advertisement
Guest User

Untitled

a guest
May 21st, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from "react"
  2. import lowRes from "./mg_low_res.jpg"
  3. import highRes from "./mg_high_res.jpg"
  4. import "./App.css"
  5.  
  6. const MAGNIFYING_RADIUS = 32
  7. const SCALE_FACTOR = 4
  8.  
  9. // high w: 2560 h: 1700
  10. // low w: 640 h: 425
  11.  
  12. class ZoomableImage extends React.Component {
  13.   state = {
  14.     showHover: false,
  15.     pageX: 0,
  16.     pageY: 0
  17.   }
  18.  
  19.   onMouseEnter = e => {
  20.     // console.log("enter")
  21.     this.setState({
  22.       showHover: true,
  23.       pageX: e.pageX,
  24.       pageY: e.pageY
  25.     })
  26.   }
  27.  
  28.   onMouseOut = () => {
  29.     console.log("leave")
  30.     // // todo WTF
  31.     // this.setState({
  32.     //   showHover: false
  33.     // })
  34.   }
  35.  
  36.   onMouseMove = e => {
  37.     // console.log("move", e.pageX, e.pageY)
  38.     this.setState({
  39.       showHover: true,
  40.       pageX: e.pageX,
  41.       pageY: e.pageY
  42.     })
  43.   }
  44.  
  45.   render() {
  46.     const { pageX, pageY, showHover } = this.state
  47.  
  48.     console.log(pageX, pageY, showHover)
  49.  
  50.     let hoverStyle = {
  51.       position: "absolute",
  52.       top: pageY - MAGNIFYING_RADIUS,
  53.       left: pageX - MAGNIFYING_RADIUS,
  54.       zIndex: 1000,
  55.       width: 64,
  56.       height: 64,
  57.       overflow: "hidden",
  58.       pointerEvents: "none",
  59.       borderRadius: "50% 50%"
  60.     }
  61.  
  62.     let imgStyle = {
  63.       position: "absolute",
  64.       left: pageX * SCALE_FACTOR,
  65.       top: pageY * SCALE_FACTOR
  66.     }
  67.  
  68.     return (
  69.       <div>
  70.         <img
  71.           onMouseMove={this.onMouseMove}
  72.           onMouseEnter={this.onMouseEnter}
  73.           // onMouseLeave={this.onMouseOut}
  74.           src={lowRes}
  75.           alt=""
  76.         />
  77.         {showHover && (
  78.           <div style={hoverStyle}>
  79.             <div>
  80.               <img style={imgStyle} src={highRes} alt="" />
  81.             </div>
  82.           </div>
  83.         )}
  84.       </div>
  85.     )
  86.   }
  87. }
  88.  
  89. function App() {
  90.   return (
  91.     <div className="App">
  92.       <ZoomableImage />
  93.     </div>
  94.   )
  95. }
  96.  
  97. export default App
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement