Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { FunctionComponent, useRef, useState } from 'react'
  2. import styled from 'styled-components'
  3.  
  4. const NoOverflowBox = styled(Box)`
  5.   overflow-x: hidden;
  6. ` as typeof Box
  7.  
  8. export const DragToScroll: FunctionComponent<{}> = (props) => {
  9.   const [isMouseDown, setMouseDown] = useState(false)
  10.   const [lastXpos, setLastXpos] = useState(0)
  11.   const scrollableRef = useRef<!!|>(null)
  12.  
  13.   const onMouseUp = () => setMouseDown(false)
  14.   const onMouseDown = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
  15.     setLastXpos(event.pageX)
  16.     setMouseDown(true)
  17.   }
  18.   const onMouseMove = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
  19.     if (!isMouseDown) return
  20.     if (scrollableRef.current) {
  21.       const currentScroll = scrollableRef.current.scrollLeft
  22.       const deltaX = (event.pageX - lastXpos) / 2
  23.       scrollableRef.current.scroll(Math.max(0, currentScroll + deltaX), 0)
  24.     }
  25.   }
  26.  
  27.   return (
  28.     <NoOverflowBox
  29.      ref={scrollableRef}
  30.      onMouseLeave={onMouseUp}
  31.      onMouseMove={onMouseMove}
  32.      onMouseDown={onMouseDown}
  33.      onMouseUp={onMouseUp}
  34.      direction="row"
  35.    >
  36.       {props.children}
  37.     </NoOverflowBox>
  38.   )
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement