geoRoam.js 1.8 KB
Newer Older
L
lang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
define(function (require) {

    var echarts = require('../../echarts');
    var actionInfo = {
        type: 'geoRoam',
        event: 'geoRoam',
        update: 'updateView'
    };

    /**
     * @payload
     * @property {string} [component=series]
     * @property {string} name Component name
     * @property {number} [dx]
     * @property {number} [dy]
     * @property {number} [zoom]
     * @property {number} [originX]
     * @property {number} [originY]
     */
    echarts.registerAction(actionInfo, function (payload, ecModel) {
        var componentType = payload.component || 'series';
        ecModel.eachComponent(componentType, function (componentModel) {
            if (componentModel.name === payload.name) {
                var dx = payload.dx;
                var dy = payload.dy;
                var zoom = payload.zoom;
                var geo = componentModel.coordinateSystem;
                if (geo.type !== 'geo') {
                    return;
                }

                var roamDetailModel = componentModel.getModel('roamDetail');
                if (dx != null && dy != null) {
                    var mapScale = geo.mapScale;

                    var panX = (roamDetailModel.get('x') || 0) + dx / mapScale[0];
                    var panY = (roamDetailModel.get('y') || 0) + dy / mapScale[1];

                    componentModel.setRoamPan
                        && componentModel.setRoamPan(panX, panY);

                    geo && geo.setPan(panX, panY);

                }
                if (zoom != null && componentModel.setRoamZoom) {
                    var previousZoom = roamDetailModel.get('zoom') || 1;

                    zoom *= previousZoom;
                    componentModel.setRoamZoom(zoom);

                    geo && geo.setZoom(zoom);
                }
            }
        });
    });
});