You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import clamp from 'lodash-es/clamp';
  2. import { eventScope, getPosition, } from '../utils/';
  3. export function selectHandler(scrollbar) {
  4. var addEvent = eventScope(scrollbar);
  5. var containerEl = scrollbar.containerEl, contentEl = scrollbar.contentEl, offset = scrollbar.offset, limit = scrollbar.limit;
  6. var isSelected = false;
  7. var animationID;
  8. function scroll(_a) {
  9. var x = _a.x, y = _a.y;
  10. if (!x && !y)
  11. return;
  12. // DISALLOW delta transformation
  13. scrollbar.setMomentum(clamp(offset.x + x, 0, limit.x) - offset.x, clamp(offset.y + y, 0, limit.y) - offset.y);
  14. animationID = requestAnimationFrame(function () {
  15. scroll({ x: x, y: y });
  16. });
  17. }
  18. addEvent(window, 'mousemove', function (evt) {
  19. if (!isSelected)
  20. return;
  21. cancelAnimationFrame(animationID);
  22. var dir = calcMomentum(scrollbar, evt);
  23. scroll(dir);
  24. });
  25. addEvent(contentEl, 'selectstart', function (evt) {
  26. evt.stopPropagation();
  27. cancelAnimationFrame(animationID);
  28. isSelected = true;
  29. });
  30. addEvent(window, 'mouseup blur', function () {
  31. cancelAnimationFrame(animationID);
  32. isSelected = false;
  33. });
  34. // patch for touch devices
  35. addEvent(containerEl, 'scroll', function (evt) {
  36. evt.preventDefault();
  37. containerEl.scrollTop = containerEl.scrollLeft = 0;
  38. });
  39. }
  40. function calcMomentum(scrollbar, evt) {
  41. var _a = scrollbar.bounding, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left;
  42. var _b = getPosition(evt), x = _b.x, y = _b.y;
  43. var res = {
  44. x: 0,
  45. y: 0,
  46. };
  47. var padding = 20;
  48. if (x === 0 && y === 0)
  49. return res;
  50. if (x > right - padding) {
  51. res.x = (x - right + padding);
  52. }
  53. else if (x < left + padding) {
  54. res.x = (x - left - padding);
  55. }
  56. if (y > bottom - padding) {
  57. res.y = (y - bottom + padding);
  58. }
  59. else if (y < top + padding) {
  60. res.y = (y - top - padding);
  61. }
  62. res.x *= 2;
  63. res.y *= 2;
  64. return res;
  65. }
  66. //# sourceMappingURL=select.js.map