roamHelper.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * @param {module:echarts/coord/View} view
  3. * @param {Object} payload
  4. * @param {Object} [zoomLimit]
  5. */
  6. function updateCenterAndZoom(view, payload, zoomLimit) {
  7. var previousZoom = view.getZoom();
  8. var center = view.getCenter();
  9. var zoom = payload.zoom;
  10. var point = view.dataToPoint(center);
  11. if (payload.dx != null && payload.dy != null) {
  12. point[0] -= payload.dx;
  13. point[1] -= payload.dy;
  14. var center = view.pointToData(point);
  15. view.setCenter(center);
  16. }
  17. if (zoom != null) {
  18. if (zoomLimit) {
  19. var zoomMin = zoomLimit.min || 0;
  20. var zoomMax = zoomLimit.max || Infinity;
  21. zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom;
  22. } // Zoom on given point(originX, originY)
  23. view.scale[0] *= zoom;
  24. view.scale[1] *= zoom;
  25. var position = view.position;
  26. var fixX = (payload.originX - position[0]) * (zoom - 1);
  27. var fixY = (payload.originY - position[1]) * (zoom - 1);
  28. position[0] -= fixX;
  29. position[1] -= fixY;
  30. view.updateTransform(); // Get the new center
  31. var center = view.pointToData(point);
  32. view.setCenter(center);
  33. view.setZoom(zoom * previousZoom);
  34. }
  35. return {
  36. center: view.getCenter(),
  37. zoom: view.getZoom()
  38. };
  39. }
  40. exports.updateCenterAndZoom = updateCenterAndZoom;