翻譯|使用教程|編輯:楊鵬連|2021-03-10 09:45:09.950|閱讀 275 次
概述:?在本教程中,我們將向您展示如何使用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@fc6vip.cn
文章轉(zhuǎn)載自: