Javascript Highcharts饼图切片动画仅在抛出错误时工作

Javascript Highcharts饼图切片动画仅在抛出错误时工作,javascript,jquery,animation,highcharts,Javascript,Jquery,Animation,Highcharts,我有一个函数,它将饼图的一部分从中心径向向外平移,在鼠标上方高亮显示,然后将其返回到鼠标上的原始位置: function setTranslation(p, slice) { p.sliced = slice; if (p.sliced) { p.graphic.animate(p.slicedTranslation); } else {

我有一个函数,它将饼图的一部分从中心径向向外平移,在鼠标上方高亮显示,然后将其返回到鼠标上的原始位置:

           function setTranslation(p, slice) {
                p.sliced = slice;
                if (p.sliced) {
                    p.graphic.animate(p.slicedTranslation);
                } else {
                    p.graphic.animate({
                        translateX: 0,
                        translateY: 0});
                }
            }
我在点mouseover和mouseout事件的Highcharts配置对象上调用它,如下所示:

    mouseOver: function () {
         setTranslation(this, true);
    },
    mouseOut: function () {
        setTranslation(this, false);
    }
它工作得很好,除非调整窗口大小,否则在我的应用程序上,我不认为用户会调整太多大小,但我已经启用了导出功能,在Chrome中,下载栏弹出并触发窗口大小调整,之后动画停止工作,翻译完成但不顺利,它立即完成

在玩了代码之后,我发现如果我有一个带有jQuery的窗口调整事件处理程序,它抛出任何错误,那么动画在调整大小后会继续工作,页面的其余部分不会中断,因此我有一个补丁:

$(window).resize(function (e) {
     throw new Error("Intentional error")
});

我认为,当窗口调整大小时,graphic.animate使用的某些参数会发生更改,并停止工作,而当以某种方式抛出错误时,则不会发生这种情况。我认为这是不正常的,故意抛出错误是不好的,但我不知道如何检查resize事件发生了什么变化。

您可以使用
mouseOver
mouseOut
事件重用内置的切片功能,以防止出现任何边缘情况,比如你正在经历的那个

以下代码将在
mouseOver
上切片,并在
mouseOut
()上删除切片:

这不受窗口大小调整的影响,而且相当整洁


具体而言,对于饼图,每个切片都是单个
系列中的
,这就是为什么这些事件位于
饼点.events

下的原因。此“从中心径向切片”与内置切片功能类似吗?如果是,为什么不使用它并避免这些问题?如果没有,您需要什么具体的区别?@Ondkloss默认的切片功能是单击,我有一个自定义的向下展开功能,使用该单击处理程序,因此我禁用了默认切片,并在mouseover和mouseout上添加了此自定义。我在一个Propitary设计扩展上使用了一个修改过的Highcharts库,因此Highcharts的使用有一些细微的区别,而且它不是Highcharts的最新版本。我不确定我是否理解您是如何使用深入分析的,但看看这个示例。这个不能用吗?它会出错,出现两个或更多的切片,或者即使在mouseOut上它们也会保持切片状态。我对它的编码有点马虎。即使使用
slice(boolean)
而不仅仅是
slice()
?示例:。我自己也试过一点,但没能成功。
plotOptions: {
    pie: {
        point: {
            events: {
                mouseOver: function(event) {
                    this.slice(true);
                },
                mouseOut: function(event) {
                    this.slice(false);
                }
            }
        }
    }
}