a97b7a292992c5c860b487363151e280.json 15.5 KB
{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useState, useRef } from 'react';\nvar MIN_SWIPE_DISTANCE = 0.1;\nvar STOP_SWIPE_DISTANCE = 0.01;\nvar REFRESH_INTERVAL = 20;\nvar SPEED_OFF_MULTIPLE = Math.pow(0.995, REFRESH_INTERVAL); // ================================= Hook =================================\n\nexport default function useTouchMove(ref, onOffset) {\n  var _useState = useState(),\n      _useState2 = _slicedToArray(_useState, 2),\n      touchPosition = _useState2[0],\n      setTouchPosition = _useState2[1];\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      lastTimestamp = _useState4[0],\n      setLastTimestamp = _useState4[1];\n\n  var _useState5 = useState(0),\n      _useState6 = _slicedToArray(_useState5, 2),\n      lastTimeDiff = _useState6[0],\n      setLastTimeDiff = _useState6[1];\n\n  var _useState7 = useState(),\n      _useState8 = _slicedToArray(_useState7, 2),\n      lastOffset = _useState8[0],\n      setLastOffset = _useState8[1];\n\n  var motionRef = useRef(); // ========================= Events =========================\n  // >>> Touch events\n\n  function onTouchStart(e) {\n    var _e$touches$ = e.touches[0],\n        screenX = _e$touches$.screenX,\n        screenY = _e$touches$.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    window.clearInterval(motionRef.current);\n  }\n\n  function onTouchMove(e) {\n    if (!touchPosition) return;\n    e.preventDefault();\n    var _e$touches$2 = e.touches[0],\n        screenX = _e$touches$2.screenX,\n        screenY = _e$touches$2.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    var offsetX = screenX - touchPosition.x;\n    var offsetY = screenY - touchPosition.y;\n    onOffset(offsetX, offsetY);\n    var now = Date.now();\n    setLastTimestamp(now);\n    setLastTimeDiff(now - lastTimestamp);\n    setLastOffset({\n      x: offsetX,\n      y: offsetY\n    });\n  }\n\n  function onTouchEnd() {\n    if (!touchPosition) return;\n    setTouchPosition(null);\n    setLastOffset(null); // Swipe if needed\n\n    if (lastOffset) {\n      var distanceX = lastOffset.x / lastTimeDiff;\n      var distanceY = lastOffset.y / lastTimeDiff;\n      var absX = Math.abs(distanceX);\n      var absY = Math.abs(distanceY); // Skip swipe if low distance\n\n      if (Math.max(absX, absY) < MIN_SWIPE_DISTANCE) return;\n      var currentX = distanceX;\n      var currentY = distanceY;\n      motionRef.current = window.setInterval(function () {\n        if (Math.abs(currentX) < STOP_SWIPE_DISTANCE && Math.abs(currentY) < STOP_SWIPE_DISTANCE) {\n          window.clearInterval(motionRef.current);\n          return;\n        }\n\n        currentX *= SPEED_OFF_MULTIPLE;\n        currentY *= SPEED_OFF_MULTIPLE;\n        onOffset(currentX * REFRESH_INTERVAL, currentY * REFRESH_INTERVAL);\n      }, REFRESH_INTERVAL);\n    }\n  } // >>> Wheel event\n\n\n  var lastWheelDirectionRef = useRef();\n\n  function onWheel(e) {\n    var deltaX = e.deltaX,\n        deltaY = e.deltaY; // Convert both to x & y since wheel only happened on PC\n\n    var mixed = 0;\n    var absX = Math.abs(deltaX);\n    var absY = Math.abs(deltaY);\n\n    if (absX === absY) {\n      mixed = lastWheelDirectionRef.current === 'x' ? deltaX : deltaY;\n    } else if (absX > absY) {\n      mixed = deltaX;\n      lastWheelDirectionRef.current = 'x';\n    } else {\n      mixed = deltaY;\n      lastWheelDirectionRef.current = 'y';\n    }\n\n    if (onOffset(-mixed, -mixed)) {\n      e.preventDefault();\n    }\n  } // ========================= Effect =========================\n\n\n  var touchEventsRef = useRef(null);\n  touchEventsRef.current = {\n    onTouchStart: onTouchStart,\n    onTouchMove: onTouchMove,\n    onTouchEnd: onTouchEnd,\n    onWheel: onWheel\n  };\n  React.useEffect(function () {\n    function onProxyTouchStart(e) {\n      touchEventsRef.current.onTouchStart(e);\n    }\n\n    function onProxyTouchMove(e) {\n      touchEventsRef.current.onTouchMove(e);\n    }\n\n    function onProxyTouchEnd(e) {\n      touchEventsRef.current.onTouchEnd(e);\n    }\n\n    function onProxyWheel(e) {\n      touchEventsRef.current.onWheel(e);\n    }\n\n    document.addEventListener('touchmove', onProxyTouchMove, {\n      passive: false\n    });\n    document.addEventListener('touchend', onProxyTouchEnd, {\n      passive: false\n    }); // No need to clean up since element removed\n\n    ref.current.addEventListener('touchstart', onProxyTouchStart, {\n      passive: false\n    });\n    ref.current.addEventListener('wheel', onProxyWheel);\n    return function () {\n      document.removeEventListener('touchmove', onProxyTouchMove);\n      document.removeEventListener('touchend', onProxyTouchEnd);\n    };\n  }, []);\n}","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/rc-tabs/es/hooks/useTouchMove.js"],"names":["_slicedToArray","React","useState","useRef","MIN_SWIPE_DISTANCE","STOP_SWIPE_DISTANCE","REFRESH_INTERVAL","SPEED_OFF_MULTIPLE","Math","pow","useTouchMove","ref","onOffset","_useState","_useState2","touchPosition","setTouchPosition","_useState3","_useState4","lastTimestamp","setLastTimestamp","_useState5","_useState6","lastTimeDiff","setLastTimeDiff","_useState7","_useState8","lastOffset","setLastOffset","motionRef","onTouchStart","e","_e$touches$","touches","screenX","screenY","x","y","window","clearInterval","current","onTouchMove","preventDefault","_e$touches$2","offsetX","offsetY","now","Date","onTouchEnd","distanceX","distanceY","absX","abs","absY","max","currentX","currentY","setInterval","lastWheelDirectionRef","onWheel","deltaX","deltaY","mixed","touchEventsRef","useEffect","onProxyTouchStart","onProxyTouchMove","onProxyTouchEnd","onProxyWheel","document","addEventListener","passive","removeEventListener"],"mappings":"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","sourcesContent":["import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useState, useRef } from 'react';\nvar MIN_SWIPE_DISTANCE = 0.1;\nvar STOP_SWIPE_DISTANCE = 0.01;\nvar REFRESH_INTERVAL = 20;\nvar SPEED_OFF_MULTIPLE = Math.pow(0.995, REFRESH_INTERVAL); // ================================= Hook =================================\n\nexport default function useTouchMove(ref, onOffset) {\n  var _useState = useState(),\n      _useState2 = _slicedToArray(_useState, 2),\n      touchPosition = _useState2[0],\n      setTouchPosition = _useState2[1];\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      lastTimestamp = _useState4[0],\n      setLastTimestamp = _useState4[1];\n\n  var _useState5 = useState(0),\n      _useState6 = _slicedToArray(_useState5, 2),\n      lastTimeDiff = _useState6[0],\n      setLastTimeDiff = _useState6[1];\n\n  var _useState7 = useState(),\n      _useState8 = _slicedToArray(_useState7, 2),\n      lastOffset = _useState8[0],\n      setLastOffset = _useState8[1];\n\n  var motionRef = useRef(); // ========================= Events =========================\n  // >>> Touch events\n\n  function onTouchStart(e) {\n    var _e$touches$ = e.touches[0],\n        screenX = _e$touches$.screenX,\n        screenY = _e$touches$.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    window.clearInterval(motionRef.current);\n  }\n\n  function onTouchMove(e) {\n    if (!touchPosition) return;\n    e.preventDefault();\n    var _e$touches$2 = e.touches[0],\n        screenX = _e$touches$2.screenX,\n        screenY = _e$touches$2.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    var offsetX = screenX - touchPosition.x;\n    var offsetY = screenY - touchPosition.y;\n    onOffset(offsetX, offsetY);\n    var now = Date.now();\n    setLastTimestamp(now);\n    setLastTimeDiff(now - lastTimestamp);\n    setLastOffset({\n      x: offsetX,\n      y: offsetY\n    });\n  }\n\n  function onTouchEnd() {\n    if (!touchPosition) return;\n    setTouchPosition(null);\n    setLastOffset(null); // Swipe if needed\n\n    if (lastOffset) {\n      var distanceX = lastOffset.x / lastTimeDiff;\n      var distanceY = lastOffset.y / lastTimeDiff;\n      var absX = Math.abs(distanceX);\n      var absY = Math.abs(distanceY); // Skip swipe if low distance\n\n      if (Math.max(absX, absY) < MIN_SWIPE_DISTANCE) return;\n      var currentX = distanceX;\n      var currentY = distanceY;\n      motionRef.current = window.setInterval(function () {\n        if (Math.abs(currentX) < STOP_SWIPE_DISTANCE && Math.abs(currentY) < STOP_SWIPE_DISTANCE) {\n          window.clearInterval(motionRef.current);\n          return;\n        }\n\n        currentX *= SPEED_OFF_MULTIPLE;\n        currentY *= SPEED_OFF_MULTIPLE;\n        onOffset(currentX * REFRESH_INTERVAL, currentY * REFRESH_INTERVAL);\n      }, REFRESH_INTERVAL);\n    }\n  } // >>> Wheel event\n\n\n  var lastWheelDirectionRef = useRef();\n\n  function onWheel(e) {\n    var deltaX = e.deltaX,\n        deltaY = e.deltaY; // Convert both to x & y since wheel only happened on PC\n\n    var mixed = 0;\n    var absX = Math.abs(deltaX);\n    var absY = Math.abs(deltaY);\n\n    if (absX === absY) {\n      mixed = lastWheelDirectionRef.current === 'x' ? deltaX : deltaY;\n    } else if (absX > absY) {\n      mixed = deltaX;\n      lastWheelDirectionRef.current = 'x';\n    } else {\n      mixed = deltaY;\n      lastWheelDirectionRef.current = 'y';\n    }\n\n    if (onOffset(-mixed, -mixed)) {\n      e.preventDefault();\n    }\n  } // ========================= Effect =========================\n\n\n  var touchEventsRef = useRef(null);\n  touchEventsRef.current = {\n    onTouchStart: onTouchStart,\n    onTouchMove: onTouchMove,\n    onTouchEnd: onTouchEnd,\n    onWheel: onWheel\n  };\n  React.useEffect(function () {\n    function onProxyTouchStart(e) {\n      touchEventsRef.current.onTouchStart(e);\n    }\n\n    function onProxyTouchMove(e) {\n      touchEventsRef.current.onTouchMove(e);\n    }\n\n    function onProxyTouchEnd(e) {\n      touchEventsRef.current.onTouchEnd(e);\n    }\n\n    function onProxyWheel(e) {\n      touchEventsRef.current.onWheel(e);\n    }\n\n    document.addEventListener('touchmove', onProxyTouchMove, {\n      passive: false\n    });\n    document.addEventListener('touchend', onProxyTouchEnd, {\n      passive: false\n    }); // No need to clean up since element removed\n\n    ref.current.addEventListener('touchstart', onProxyTouchStart, {\n      passive: false\n    });\n    ref.current.addEventListener('wheel', onProxyWheel);\n    return function () {\n      document.removeEventListener('touchmove', onProxyTouchMove);\n      document.removeEventListener('touchend', onProxyTouchEnd);\n    };\n  }, []);\n}"]},"metadata":{},"sourceType":"module"}