翻譯|使用教程|編輯:楊鵬連|2021-03-10 09:45:09.950|閱讀 292 次
概述:?在本教程中,我們將向您展示如何使用Highcharts構(gòu)建彩票輪。由于高度可定制的庫功能,這是可能的,您幾乎可以創(chuàng)建任何基于SVG的交互式可視化,例如交互式拼圖或蛇游戲。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Highcharts是一款純JavaScript編寫的圖表庫,為你的Web網(wǎng)站、Web應(yīng)用程序提供直觀、交互式圖表。當(dāng)前支持折線、曲線、區(qū)域、區(qū)域曲線圖、柱形圖、條形圖、餅圖、散點(diǎn)圖、角度測量圖、區(qū)域排列圖、區(qū)域曲線排列圖、柱形排列圖、極坐標(biāo)圖等幾十種圖表類型。
在本教程中,我們將向您展示如何使用Highcharts構(gòu)建彩票輪。由于高度可定制的庫功能,這是可能的,您幾乎可以創(chuàng)建任何基于SVG的交互式可視化,例如交互式拼圖或蛇游戲。
下圖顯示了一個(gè)彩票輪和四個(gè)設(shè)置選項(xiàng):
讓我們檢查代碼,并了解如何創(chuàng)建這樣的演示。
該代碼有四個(gè)主要部分:
第一步是使用箭頭創(chuàng)建輪子。
車輪代碼簡單明了。這只是一個(gè)基本的餅圖:
chart = Highcharts.chart('container', {
chart: {
animation: false,
marginTop: 100,
events: {
...
},
title: {
text: 'Chance wheel'
},
series: [{
type: 'pie',
size: '100%',
dataLabels: {
distance: -20
},
data: [
['Pudding', 1],
['Cake', 1],
['Salad', 1],
['Potato', 1],
['Bread', 1]
],
startAngle: 360 * Math.random()
}]
});
使用Highcharts時(shí)未提供開箱即用的箭頭,因此您必須從頭開始構(gòu)建它。由于使用了renderer方法,您可以輕松地將任何自定義路徑添加到Highcharts代碼。triangle = chart.renderer.path([
['M', chart.chartWidth / 2 - 10, chart.plotTop - 5],
['L', chart.chartWidth / 2 + 10, chart.plotTop - 5],
['L', chart.chartWidth / 2, chart.plotTop + 10],
['Z']
])
.attr({
fill: 'black'
})
.add();
完成此部分后,就該移動到動畫部分了。
旋轉(zhuǎn)動畫
對于旋轉(zhuǎn)動畫,有兩個(gè)主要部分:
// Create the arrow at the top.
t = setInterval(() => { // Animation loop
if (!physics.isActive) {
startAngle += diff;
if (startAngle > 360) {
startAngle -= 360;
}
diff *= 0.98;
chart.series[0].update({
startAngle
});
借助此巧妙公式中的diff變量,車輪每次旋轉(zhuǎn)后速度都會降低。現(xiàn)在,車輪能夠旋轉(zhuǎn)并停止。讓我們看看如何選擇一個(gè)贏家。diff *= 0.98;
選擇獲勝者
輪子停止運(yùn)動后,findWinner如果箭頭位置在切片起始角度和閾值之內(nèi),則以下方法將遍歷數(shù)據(jù)集或切片并進(jìn)行處理winThreshold。如果存在匹配項(xiàng),則findWinner返回切片的索引以獲取標(biāo)簽并顯示獲勝者。
const findWinner = (data) => {
const sliceSize = 360 / data.length;
const winThreshold = 360 - sliceSize;
let sliceBeginning;
for (let i in data) {
sliceBeginning = radToDeg(data[i].shapeArgs.start) + 90;
if (sliceBeginning > 360) {
...
}
}
return -1;
}
到目前為止,該演示包含所有彩票輪組件(請參見下面的演示):
春季動畫
產(chǎn)生人造物理學(xué)運(yùn)動的最重要變量是力,阻力,當(dāng)前角度,目標(biāo)角度,強(qiáng)度和閾值。讓我們將它們?nèi)渴占谝粋€(gè)物體物理下:
let physics = {
force: 0,
angleVel: 0,
angle: 0,
prevAngle: 0, // only used to calculate winner
strength: 0.003 + strengthSlider.value / 10000, // tweakable
drag: 0.98 + dragSlider.value / 1000, // tweakable
threshold: 2 + lengthSlider.value / 10, // tweakable
targ: 0,
isActive: false
};
從春季動畫中選擇獲勝者
本教程的最后一步是選擇獲勝者。隨著方向盤左右移動,我們會讀取每個(gè)方向改變的臨時(shí)獲勝者。如果連續(xù)兩次選擇獲勝者的索引,則肯定選擇了獲勝者(請參見下面的代碼):
if (physics.prevAngle >= physics.angle && currentWinner < 0) {
currentWinner = findWinner(chart.series[0].data);
foundPossibleWinner = true;
} else if (
physics.prevAngle <= physics.angle &&
foundPossibleWinner
) {
const nextWinner = findWinner(chart.series[0].data);
if (currentWinner == nextWinner) {
chart.setTitle({
text: 'The winner is ' +
chart.series[0].data[currentWinner].name + '!'
});
foundPossibleWinner = false;
button.disabled = false;
} else {
currentWinner = -1;
foundPossibleWinner = false;
}
}
APS幫助提升企業(yè)生產(chǎn)效率,真正實(shí)現(xiàn)生產(chǎn)計(jì)劃可視化呈現(xiàn)與控制,快速有效響應(yīng)不同場景的生產(chǎn)計(jì)劃,提高準(zhǔn)時(shí)交貨能力,提高產(chǎn)能和資源利用率
想要購買Highcharts正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: