grid 上下拖动

描述:当前是关于Echarts图表中的 示例。
 
            var height = 800;

var grid = {
    top: 20,
    left: 100,
    dragHeight: 100,
    sliderHeightUnassign: height * 0.3,
    sliderHeight: height * 0.7,
    heightGap: 0.3
};

var dataAll = [
    [
        [10.0, 8.04],
        [8.0, 6.95],
        [13.0, 7.58],
        [9.0, 8.81],
        [11.0, 8.33],
        [14.0, 9.96],
        [6.0, 7.24],
        [4.0, 4.26],
        [12.0, 10.84],
        [7.0, 4.82],
        [5.0, 5.68]
    ],
    [
        [10.0, 9.14],
        [8.0, 8.14],
        [13.0, 8.74],
        [9.0, 8.77],
        [11.0, 9.26],
        [14.0, 8.10],
        [6.0, 6.13],
        [4.0, 3.10],
        [12.0, 9.13],
        [7.0, 7.26],
        [5.0, 4.74]
    ],
    [
        [10.0, 7.46],
        [8.0, 6.77],
        [13.0, 12.74],
        [9.0, 7.11],
        [11.0, 7.81],
        [14.0, 8.84],
        [6.0, 6.08],
        [4.0, 5.39],
        [12.0, 8.15],
        [7.0, 6.42],
        [5.0, 5.73]
    ],
    [
        [8.0, 6.58],
        [8.0, 5.76],
        [8.0, 7.71],
        [8.0, 8.84],
        [8.0, 8.47],
        [8.0, 7.04],
        [8.0, 5.25],
        [19.0, 12.50],
        [8.0, 5.56],
        [8.0, 7.91],
        [8.0, 6.89]
    ]
];


var option = {
    grid: [
        {left: grid.left, top: grid.top, width: '80%', height: grid.sliderHeightUnassign, id: 'gridUnassign'},
        {left: grid.left, top: (grid.sliderHeightUnassign + grid.dragHeight), width: '80%', height: grid.sliderHeight, id: 'grid'}
    ],
    tooltip: {
        formatter: 'Group {a}: ({c})'
    },
    xAxis: [
        {gridIndex: 0, min: 0, max: 20},
        {gridIndex: 1, min: 0, max: 20}
    ],
    yAxis: [
        {gridIndex: 0, min: 0, max: 15},
        {gridIndex: 1, min: 0, max: 15}
    ],
    dataZoom: [
        {
            type: 'slider',
            show: true,
            id: 'sliderX',
            xAxisIndex: [0, 1],
            start: 1,
            end: 35
        },
        {
            type: 'inside',
            id: 'insideX',
            xAxisIndex: [0, 1],
            start: 1,
            end: 35
        },
        {
            type: 'slider',
            show: true,
            id: 'sliderYUnassign',
            orient: 'vertical',
            yAxisIndex: [0],
            left: '93%',
            start: 29,
            end: 36
        },
        {
            type: 'inside',
            id: 'insiderYUnassign',
            orient: 'vertical',
            yAxisIndex: [0],
            start: 29,
            end: 36
        },
        {
            type: 'slider',
            show: true,
            id: 'sliderY',
            orient: 'vertical',
            yAxisIndex: [1],
            left: '93%',
            start: 29,
            end: 36
        },
        {
            type: 'inside',
            id: 'insideY',
            orient: 'vertical',
            yAxisIndex: [1],
            start: 29,
            end: 36
        }
    ],
    graphic: [{
        type: 'group',
        id: 'graphic',
        left: 100,
        top: grid.sliderHeightUnassign + grid.dragHeight / 2,
        children: [
            {
                type: 'line',
                z: 9,
                id: 'line',
                shape: {
                    x1: 0,
                    y1: 0,
                    x2: 1000,
                    y2: 0
                },
                style: {
                    fill: '#DCE2EB',
                    stroke: '#DCE2EB',
                    lineWidth: 2,
                    shadowBlur: 0,                   
                },
                draggable: true,
                ondrag: function (event) {
                    setGridHeight(event.event.y);
                }
            },
            {
                type: 'rect',
                z: 9,
                id: 'rect',
                shape: {
                    x: 500,
                    y: -10,
                    width: 50,
                    height: 10
                },
                style: {
                    fill: '#DCE2EB',
                    stroke: '#DCE2EB',
                    lineWidth: 2,
                    shadowBlur: 0,                   
                },
                draggable: true,
                ondrag: function (event) {
                    setGridHeight(event.event.y);
                }
            },
            {
                type: 'text',
                z: 10,
                id: 'text',
                style: {
                    text: '︿',
                    fill: '#ffffff',
                    x: 520,
                    y: -14
                },
                draggable: true,
                ondrag: function (event) {
                    setGridHeight(event.event.y);
                }
            }
        ]
    }],
    series: [
        {
            name: 'I',
            type: 'scatter',
            xAxisIndex: 0,
            yAxisIndex: 0,
            data: dataAll[0],
        },
        {
            name: 'II',
            type: 'scatter',
            xAxisIndex: 1,
            yAxisIndex: 1,
            data: dataAll[1],
        }
    ]
};

function renderChart() {
    myChart.setOption(option, true);
}

function setGridHeight(position) {
    var unassignHeight = position - 20;
    var gridHeight = grid.sliderHeightUnassign + grid.sliderHeight + grid.dragHeight;
    grid.sliderHeightUnassign = unassignHeight;
    // 这里最重要,重新计算出比例
    grid.heightGap = unassignHeight / height;
    grid.sliderHeight = height * grid.heightGap;

    option.graphic.forEach((item, key) => {
        if (item.id === 'graphic') {
            option.graphic[key].top = unassignHeight + grid.dragHeight / 2;
        }
    });

    // 设置grid
    option.grid.forEach((item, key) => {
        if (item.id === 'gridUnassign') {
            option.grid[key].height = grid.sliderHeightUnassign; 
        }
        else {
            option.grid[key].height = grid.sliderHeight; 
            option.grid[key].top = grid.sliderHeightUnassign + grid.dragHeight;
        }
    });

    renderChart();
}
renderChart();