MapPointer.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* *
  2. *
  3. * (c) 2010-2019 Torstein Honsi
  4. *
  5. * License: www.highcharts.com/license
  6. *
  7. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  8. *
  9. * */
  10. 'use strict';
  11. import H from '../parts/Globals.js';
  12. import U from '../parts/Utilities.js';
  13. var extend = U.extend, pick = U.pick, wrap = U.wrap;
  14. import '../parts/Pointer.js';
  15. var Pointer = H.Pointer;
  16. /* eslint-disable no-invalid-this */
  17. // Extend the Pointer
  18. extend(Pointer.prototype, {
  19. // The event handler for the doubleclick event
  20. onContainerDblClick: function (e) {
  21. var chart = this.chart;
  22. e = this.normalize(e);
  23. if (chart.options.mapNavigation.enableDoubleClickZoomTo) {
  24. if (chart.pointer.inClass(e.target, 'highcharts-tracker') &&
  25. chart.hoverPoint) {
  26. chart.hoverPoint.zoomTo();
  27. }
  28. }
  29. else if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {
  30. chart.mapZoom(0.5, chart.xAxis[0].toValue(e.chartX), chart.yAxis[0].toValue(e.chartY), e.chartX, e.chartY);
  31. }
  32. },
  33. // The event handler for the mouse scroll event
  34. onContainerMouseWheel: function (e) {
  35. var chart = this.chart, delta;
  36. e = this.normalize(e);
  37. // Firefox uses e.detail, WebKit and IE uses wheelDelta
  38. delta = e.detail || -(e.wheelDelta / 120);
  39. if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {
  40. chart.mapZoom(Math.pow(chart.options.mapNavigation.mouseWheelSensitivity, delta), chart.xAxis[0].toValue(e.chartX), chart.yAxis[0].toValue(e.chartY), e.chartX, e.chartY);
  41. }
  42. }
  43. });
  44. // The pinchType is inferred from mapNavigation options.
  45. wrap(Pointer.prototype, 'zoomOption', function (proceed) {
  46. var mapNavigation = this.chart.options.mapNavigation;
  47. // Pinch status
  48. if (pick(mapNavigation.enableTouchZoom, mapNavigation.enabled)) {
  49. this.chart.options.chart.pinchType = 'xy';
  50. }
  51. proceed.apply(this, [].slice.call(arguments, 1));
  52. });
  53. // Extend the pinchTranslate method to preserve fixed ratio when zooming
  54. wrap(Pointer.prototype, 'pinchTranslate', function (proceed, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) {
  55. var xBigger;
  56. proceed.call(this, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);
  57. // Keep ratio
  58. if (this.chart.options.chart.type === 'map' && this.hasZoom) {
  59. xBigger = transform.scaleX > transform.scaleY;
  60. this.pinchTranslateDirection(!xBigger, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, xBigger ? transform.scaleX : transform.scaleY);
  61. }
  62. });