|
- {"ast":null,"code":"import clamp from 'lodash-es/clamp';\nimport { eventScope, getPosition } from '../utils/';\nexport function selectHandler(scrollbar) {\n var addEvent = eventScope(scrollbar);\n var containerEl = scrollbar.containerEl,\n contentEl = scrollbar.contentEl,\n offset = scrollbar.offset,\n limit = scrollbar.limit;\n var isSelected = false;\n var animationID;\n\n function scroll(_a) {\n var x = _a.x,\n y = _a.y;\n if (!x && !y) return; // DISALLOW delta transformation\n\n scrollbar.setMomentum(clamp(offset.x + x, 0, limit.x) - offset.x, clamp(offset.y + y, 0, limit.y) - offset.y);\n animationID = requestAnimationFrame(function () {\n scroll({\n x: x,\n y: y\n });\n });\n }\n\n addEvent(window, 'mousemove', function (evt) {\n if (!isSelected) return;\n cancelAnimationFrame(animationID);\n var dir = calcMomentum(scrollbar, evt);\n scroll(dir);\n });\n addEvent(contentEl, 'selectstart', function (evt) {\n evt.stopPropagation();\n cancelAnimationFrame(animationID);\n isSelected = true;\n });\n addEvent(window, 'mouseup blur', function () {\n cancelAnimationFrame(animationID);\n isSelected = false;\n }); // patch for touch devices\n\n addEvent(containerEl, 'scroll', function (evt) {\n evt.preventDefault();\n containerEl.scrollTop = containerEl.scrollLeft = 0;\n });\n}\n\nfunction calcMomentum(scrollbar, evt) {\n var _a = scrollbar.bounding,\n top = _a.top,\n right = _a.right,\n bottom = _a.bottom,\n left = _a.left;\n\n var _b = getPosition(evt),\n x = _b.x,\n y = _b.y;\n\n var res = {\n x: 0,\n y: 0\n };\n var padding = 20;\n if (x === 0 && y === 0) return res;\n\n if (x > right - padding) {\n res.x = x - right + padding;\n } else if (x < left + padding) {\n res.x = x - left - padding;\n }\n\n if (y > bottom - padding) {\n res.y = y - bottom + padding;\n } else if (y < top + padding) {\n res.y = y - top - padding;\n }\n\n res.x *= 2;\n res.y *= 2;\n return res;\n}","map":null,"metadata":{},"sourceType":"module"}
|