BMapView.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. var echarts = require("echarts");
  2. var _default = echarts.extendComponentView({
  3. type: 'bmap',
  4. render: function (bMapModel, ecModel, api) {
  5. var rendering = true;
  6. var bmap = bMapModel.getBMap();
  7. var viewportRoot = api.getZr().painter.getViewportRoot();
  8. var coordSys = bMapModel.coordinateSystem;
  9. var moveHandler = function (type, target) {
  10. if (rendering) {
  11. return;
  12. }
  13. var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
  14. var mapOffset = [-parseInt(offsetEl.style.left, 10) || 0, -parseInt(offsetEl.style.top, 10) || 0];
  15. viewportRoot.style.left = mapOffset[0] + 'px';
  16. viewportRoot.style.top = mapOffset[1] + 'px';
  17. coordSys.setMapOffset(mapOffset);
  18. bMapModel.__mapOffset = mapOffset;
  19. api.dispatchAction({
  20. type: 'bmapRoam'
  21. });
  22. };
  23. function zoomEndHandler() {
  24. if (rendering) {
  25. return;
  26. }
  27. api.dispatchAction({
  28. type: 'bmapRoam'
  29. });
  30. }
  31. bmap.removeEventListener('moving', this._oldMoveHandler); // FIXME
  32. // Moveend may be triggered by centerAndZoom method when creating coordSys next time
  33. // bmap.removeEventListener('moveend', this._oldMoveHandler);
  34. bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
  35. bmap.addEventListener('moving', moveHandler); // bmap.addEventListener('moveend', moveHandler);
  36. bmap.addEventListener('zoomend', zoomEndHandler);
  37. this._oldMoveHandler = moveHandler;
  38. this._oldZoomEndHandler = zoomEndHandler;
  39. var roam = bMapModel.get('roam');
  40. if (roam && roam !== 'scale') {
  41. bmap.enableDragging();
  42. } else {
  43. bmap.disableDragging();
  44. }
  45. if (roam && roam !== 'move') {
  46. bmap.enableScrollWheelZoom();
  47. bmap.enableDoubleClickZoom();
  48. bmap.enablePinchToZoom();
  49. } else {
  50. bmap.disableScrollWheelZoom();
  51. bmap.disableDoubleClickZoom();
  52. bmap.disablePinchToZoom();
  53. }
  54. var originalStyle = bMapModel.__mapStyle;
  55. var newMapStyle = bMapModel.get('mapStyle') || {}; // FIXME, Not use JSON methods
  56. var mapStyleStr = JSON.stringify(newMapStyle);
  57. if (JSON.stringify(originalStyle) !== mapStyleStr) {
  58. // FIXME May have blank tile when dragging if setMapStyle
  59. if (Object.keys(newMapStyle).length) {
  60. bmap.setMapStyle(newMapStyle);
  61. }
  62. bMapModel.__mapStyle = JSON.parse(mapStyleStr);
  63. }
  64. rendering = false;
  65. }
  66. });
  67. module.exports = _default;