可鼠标拖动旋转的饼图

描述:当前是关于Echarts图表中的 饼图 示例。
 
            option = {
    series: [
        {
            type: 'pie',
            data: [
                { value: 1048, name: '搜索引擎' },
                { value: 735, name: '直接访问' },
                { value: 580, name: '邮件营销' },
                { value: 484, name: '联盟广告' },
                { value: 300, name: '视频广告' }
            ]
        }
    ]
};

let statu = false
let last = []
let shape = {}
let waits = true

function mousedown(value) {
    // 获取饼图属性 圆心位置
    shape = value.event.target.shape
    statu = true
}

function mouseup(value) {
    statu = false
    last = []
}
function getDirection(xy0, xy1) {
    // 通过叉乘计算旋转方向
    let xy = xy0[0] * xy1[1] - xy1[0] * xy0[1]
    if (xy > 0) {
        return -1
    }
    if (xy < 0) {
        return 1
    }
    return 0
}

function mousemove(value) {
    if (statu && waits) {
        waits = false
        let event = value.event
        if (last.length === 0) {
            // 以圆心作为新建坐标系的原点
            last = [event.offsetX - shape.cx, event.offsetY - shape.cy]
        } else {
            let xy0 = last
            let xy1 = [event.offsetX - shape.cx, event.offsetY - shape.cy]
            // 通过向量 计算出前后两点移动相对于圆心转动的夹角度数
            let angle =
                getDirection(xy0, xy1) *
                    (180 / Math.PI) *
                    Math.acos(
                        Math.min(1.0, (xy1[1] * xy0[1] + xy1[0] * xy0[0]) /
                            (Math.sqrt(xy1[0] * xy1[0] + xy1[1] * xy1[1]) *
                                Math.sqrt(xy0[0] * xy0[0] + xy0[1] * xy0[1])))
                    ) +
                myChart.getOption().series[0].startAngle
            console.log("mousemove -> angle", angle)
            myChart.setOption({
                series: {
                    startAngle: angle
                }
            })
            last = xy1
        }
        waits = true
    }
}

myChart.on('mouseup', mouseup)
myChart.on('mouseout', mouseup)
myChart.on('mousedown', mousedown)
myChart.on('mousemove', mousemove)