Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

53 řádky
2.0 KiB

  1. import { eventScope, TouchRecord, } from '../utils/';
  2. var activeScrollbar;
  3. export function touchHandler(scrollbar) {
  4. var MIN_EAING_MOMENTUM = 50;
  5. var EASING_MULTIPLIER = /Android/.test(navigator.userAgent) ? 3 : 2;
  6. var target = scrollbar.options.delegateTo || scrollbar.containerEl;
  7. var touchRecord = new TouchRecord();
  8. var addEvent = eventScope(scrollbar);
  9. var damping;
  10. var pointerCount = 0;
  11. addEvent(target, 'touchstart', function (evt) {
  12. // start records
  13. touchRecord.track(evt);
  14. // stop scrolling
  15. scrollbar.setMomentum(0, 0);
  16. // save damping
  17. if (pointerCount === 0) {
  18. damping = scrollbar.options.damping;
  19. scrollbar.options.damping = Math.max(damping, 0.5); // less frames on touchmove
  20. }
  21. pointerCount++;
  22. });
  23. addEvent(target, 'touchmove', function (evt) {
  24. if (activeScrollbar && activeScrollbar !== scrollbar)
  25. return;
  26. touchRecord.update(evt);
  27. var _a = touchRecord.getDelta(), x = _a.x, y = _a.y;
  28. scrollbar.addTransformableMomentum(x, y, evt, function (willScroll) {
  29. if (willScroll) {
  30. evt.preventDefault();
  31. activeScrollbar = scrollbar;
  32. }
  33. });
  34. });
  35. addEvent(target, 'touchcancel touchend', function (evt) {
  36. var velocity = touchRecord.getVelocity();
  37. var momentum = { x: 0, y: 0 };
  38. Object.keys(velocity).forEach(function (dir) {
  39. var s = velocity[dir] / damping;
  40. // throw small values
  41. momentum[dir] = Math.abs(s) < MIN_EAING_MOMENTUM ? 0 : s * EASING_MULTIPLIER;
  42. });
  43. scrollbar.addTransformableMomentum(momentum.x, momentum.y, evt);
  44. pointerCount--;
  45. // restore damping
  46. if (pointerCount === 0) {
  47. scrollbar.options.damping = damping;
  48. }
  49. touchRecord.release(evt);
  50. activeScrollbar = null;
  51. });
  52. }
  53. //# sourceMappingURL=touch.js.map