2014-11-14 64 views
3

我正在處理關於旋轉用戶點擊餅圖的一部分時使用highcharts.js創建的餅圖的請求的請求。 給出一個180度角的固定點,餡餅應該將自己指向點擊部分,朝向該固定點,在我的情況下用三角形表示。所以,每當用戶點擊某個部分時,固定的三角形就會指向它,就像餡餅旋轉一樣。 我已經設法抓住click事件並更改startAngle選項是這樣的:Highcharts - 旋轉餅圖將點擊的部分對齊到一個固定點(180°)

// Rotate chart 
donutChart.series[0].update({ 
    startAngle: convertAngle("rads", this.angle) // gives the point angle in rads 
}); 

這顯然是錯誤的,但我想這樣做,在點事件擊事件。

你有什麼建議,以實現這一目標(如果甚至可能的話)?

謝謝。

回答

0

很酷的問題。

你的旋轉算法有點缺陷。舉例來說,您希望startAngle能夠將您的切片從0度(圖表頂部)開始旋轉至第3個切片。這將是:

-(slice1ArcDegrees + slice2ArcDegrees) 

的ArcDegrees可以發現:

(percentage/100.0 * 360.0) 

在點單擊處理一起把這個:

var points = this.series.points; 
    var startAngle = 0; 
    for (var i = 0; i < points.length; i++){ 
    var p = points[i]; 
    if (p == this) 
    { 
     break; 
    } 
    startAngle += (p.percentage/100.0 * 360.0); 
    } 
    this.series.update({ 
    startAngle: -startAngle + 180 - ((this.percentage/100.0 * 360.0)/2) // center at 180 
    }); 

這裏是一個example

+0

感謝您的建議。假設我想讓切片始終朝向「南」位置(180°),就像我所說的那樣。我應該如何修改你的代碼才能做到這一點?我可以從你的例子中看到,當我單擊它們時,切片始終從0開始,但它們不位於0的中心。 – AlexKibo88 2014-11-15 11:04:33

+0

@ AlexKibo88,只需使用'startAngle:-startAngle + 180'開始180度,或者'startAngle :-startAngle + 180 - ((this.percentage/100.0 * 360.0)/ 2)'以180度爲中心切片,請參閱udpated示例:http://plnkr.co/edit/ONYANza2Aigq6Qx9dKEt?p=preview – Mark 2014-11-15 15:08:50

+0

謝謝,這真的很有幫助! – AlexKibo88 2014-11-15 18:51:10