|
- {"ast":null,"code":"import clamp from 'lodash-es/clamp';\nimport { isOneOf, getPosition, eventScope, setStyle } from '../utils/';\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"X\"] = 0] = \"X\";\n Direction[Direction[\"Y\"] = 1] = \"Y\";\n})(Direction || (Direction = {}));\n\nexport function mouseHandler(scrollbar) {\n var addEvent = eventScope(scrollbar);\n var container = scrollbar.containerEl;\n var _a = scrollbar.track,\n xAxis = _a.xAxis,\n yAxis = _a.yAxis;\n\n function calcOffset(direction, clickPosition) {\n var size = scrollbar.size;\n\n if (direction === Direction.X) {\n var totalWidth = size.container.width + (xAxis.thumb.realSize - xAxis.thumb.displaySize);\n return clickPosition / totalWidth * size.content.width;\n }\n\n if (direction === Direction.Y) {\n var totalHeight = size.container.height + (yAxis.thumb.realSize - yAxis.thumb.displaySize);\n return clickPosition / totalHeight * size.content.height;\n }\n\n return 0;\n }\n\n function getTrackDirection(elem) {\n if (isOneOf(elem, [xAxis.element, xAxis.thumb.element])) {\n return Direction.X;\n }\n\n if (isOneOf(elem, [yAxis.element, yAxis.thumb.element])) {\n return Direction.Y;\n }\n\n return void 0;\n }\n\n var isMouseDown;\n var isMouseMoving;\n var startOffsetToThumb;\n var startTrackDirection;\n var containerRect;\n addEvent(container, 'click', function (evt) {\n if (isMouseMoving || !isOneOf(evt.target, [xAxis.element, yAxis.element])) {\n return;\n }\n\n var track = evt.target;\n var direction = getTrackDirection(track);\n var rect = track.getBoundingClientRect();\n var clickPos = getPosition(evt);\n var offset = scrollbar.offset,\n limit = scrollbar.limit;\n\n if (direction === Direction.X) {\n var offsetOnTrack = clickPos.x - rect.left - xAxis.thumb.displaySize / 2;\n scrollbar.setMomentum(clamp(calcOffset(direction, offsetOnTrack) - offset.x, -offset.x, limit.x - offset.x), 0);\n }\n\n if (direction === Direction.Y) {\n var offsetOnTrack = clickPos.y - rect.top - yAxis.thumb.displaySize / 2;\n scrollbar.setMomentum(0, clamp(calcOffset(direction, offsetOnTrack) - offset.y, -offset.y, limit.y - offset.y));\n }\n });\n addEvent(container, 'mousedown', function (evt) {\n if (!isOneOf(evt.target, [xAxis.thumb.element, yAxis.thumb.element])) {\n return;\n }\n\n isMouseDown = true;\n var thumb = evt.target;\n var cursorPos = getPosition(evt);\n var thumbRect = thumb.getBoundingClientRect();\n startTrackDirection = getTrackDirection(thumb); // pointer offset to thumb\n\n startOffsetToThumb = {\n x: cursorPos.x - thumbRect.left,\n y: cursorPos.y - thumbRect.top\n }; // container bounding rectangle\n\n containerRect = container.getBoundingClientRect(); // prevent selection, see:\n // https://github.com/idiotWu/smooth-scrollbar/issues/48\n\n setStyle(scrollbar.containerEl, {\n '-user-select': 'none'\n });\n });\n addEvent(window, 'mousemove', function (evt) {\n if (!isMouseDown) return;\n isMouseMoving = true;\n var offset = scrollbar.offset;\n var cursorPos = getPosition(evt);\n\n if (startTrackDirection === Direction.X) {\n // get percentage of pointer position in track\n // then tranform to px\n // don't need easing\n var offsetOnTrack = cursorPos.x - startOffsetToThumb.x - containerRect.left;\n scrollbar.setPosition(calcOffset(startTrackDirection, offsetOnTrack), offset.y);\n }\n\n if (startTrackDirection === Direction.Y) {\n var offsetOnTrack = cursorPos.y - startOffsetToThumb.y - containerRect.top;\n scrollbar.setPosition(offset.x, calcOffset(startTrackDirection, offsetOnTrack));\n }\n });\n addEvent(window, 'mouseup blur', function () {\n isMouseDown = isMouseMoving = false;\n setStyle(scrollbar.containerEl, {\n '-user-select': ''\n });\n });\n}","map":null,"metadata":{},"sourceType":"module"}
|