Joa*_*aus 4 gradient canvas pixel percentage chart.js
我正在使用 Chart.js 制作具有线性渐变的图表:
\n\n<script src="js/Chart.min.js"></script>\n<script type="text/javascript">\nvar ctx = document.getElementById(\'myChart\').getContext(\'2d\');\n\nvar grd = ctx.createLinearGradient(0, 0, canvas.width, 0);\ngrd.addColorStop(0.2, \'red\');\ngrd.addColorStop(0.4, \'orange\');\ngrd.addColorStop(0.78, \'limegreen\');\ngrd.addColorStop(0.9, \'black\');\n\nvar chart = new Chart(ctx, {\n // The type of chart we want to create\n type: \'horizontalBar\',\n\n // The data for our dataset\n data: {\n labels: ["Confort"],\n datasets: [\n {\n label: ["Confort actuel"],\n borderWidth: 0,\n borderColor: \'rgba(0,0,0,1.0)\',\n backgroundColor: \'rgba(0,0,0,0.2)\',\n hoverBackgroundColor: \'rgba(0,0,0,0)\',\n data: [64], \n },\n {\n label: ["Confort projet\xc3\xa9"],\n borderWidth: 0,\n borderColor: \'rgba(0,0,0,1.0)\',\n backgroundColor: grd,\n hoverBackgroundColor: grd,\n data: [120],\n },\n {\n label: ["Confort optimal"],\n borderWidth: 0,\n borderColor: \'rgba(0,0,0,1.0)\',\n backgroundColor: \'rgba(205,205,205,1.0)\',\n hoverBackgroundColor: \'rgba(205,205,205,1.0)\',\n data: [100],\n },\n ]\n },\n\n // Configuration options go here\n options: {\n legend: {\n display: false,\n },\n scales: {\n xAxes: [{\n stacked:false,\n ticks: {\n beginAtZero:true,\n max: 130,\n display: false,\n },\n gridLines : {\n display: false,\n drawBorder: false,\n },\n }],\n yAxes: [{\n display:false,\n stacked:true,\n barThickness: 20,\n gridLines: {\n display: false,\n drawBorder: false,\n }\n }],\n },\n tooltips: {\n enabled: false,\n callbacks: {\n label: function(tooltipItems, data) { \n return " " + tooltipItems.xLabel + "%";\n }\n }\n },\n }\n});\nChart.pluginService.register({\n afterDraw: function(chartInstance) {\n var ctx = chartInstance.chart.ctx;\n\n // render the value of the chart above the bar\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, \'normal\', Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = \'right\';\n ctx.textBaseline = \'center\';\n\n chartInstance.data.datasets.forEach(function (dataset) {\n for (var i = 0; i < dataset.data.length; i++) {\n var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;\n if (dataset.label[i] == "Confort projet\xc3\xa9") {\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x-8, model.y + 21);\n ctx.fillText("\xe2\x96\xb2", model.x+6, model.y + 19);\n }\n else if (dataset.label[i] == "Confort actuel") {\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x-8, model.y - 14);\n ctx.fillText("\xe2\x96\xbc", model.x+6, model.y - 12);\n }\n else {\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x+130, model.y - 14);\n ctx.fillText("\xe2\x96\xbc", model.x+6, model.y - 12);\n }\n }\n });\n }\n});\n</script>\nRun Code Online (Sandbox Code Playgroud)\n\n正如您所看到的,我尝试使用 canvas.width 作为渐变(而不是之前的 1024)。但这让我的画布崩溃了,我不知道为什么......
\n\n有人可以帮助我吗?
\n\n谢谢!
\n您应该使用以下...
\n\nctx.canvas.width\nRun Code Online (Sandbox Code Playgroud)\n\nctx.canvas.width\nRun Code Online (Sandbox Code Playgroud)\r\nvar ctx = document.getElementById(\'myChart\').getContext(\'2d\');\r\n\r\nvar grd = ctx.createLinearGradient(0, 0, ctx.canvas.width, 0);\r\ngrd.addColorStop(0.2, \'red\');\r\ngrd.addColorStop(0.4, \'orange\');\r\ngrd.addColorStop(0.78, \'limegreen\');\r\ngrd.addColorStop(0.9, \'black\');\r\n\r\nvar chart = new Chart(ctx, {\r\n // The type of chart we want to create\r\n type: \'horizontalBar\',\r\n\r\n // The data for our dataset\r\n data: {\r\n labels: ["Confort"],\r\n datasets: [{\r\n label: ["Confort actuel"],\r\n borderWidth: 0,\r\n borderColor: \'rgba(0,0,0,1.0)\',\r\n backgroundColor: \'rgba(0,0,0,0.2)\',\r\n hoverBackgroundColor: \'rgba(0,0,0,0)\',\r\n data: [64],\r\n }, {\r\n label: ["Confort projet\xc3\xa9"],\r\n borderWidth: 0,\r\n borderColor: \'rgba(0,0,0,1.0)\',\r\n backgroundColor: grd,\r\n hoverBackgroundColor: grd,\r\n data: [120],\r\n }, {\r\n label: ["Confort optimal"],\r\n borderWidth: 0,\r\n borderColor: \'rgba(0,0,0,1.0)\',\r\n backgroundColor: \'rgba(205,205,205,1.0)\',\r\n hoverBackgroundColor: \'rgba(205,205,205,1.0)\',\r\n data: [100],\r\n }, ]\r\n },\r\n\r\n // Configuration options go here\r\n options: {\r\n legend: {\r\n display: false,\r\n },\r\n scales: {\r\n xAxes: [{\r\n stacked: false,\r\n ticks: {\r\n beginAtZero: true,\r\n max: 130,\r\n display: false,\r\n },\r\n gridLines: {\r\n display: false,\r\n drawBorder: false,\r\n },\r\n }],\r\n yAxes: [{\r\n display: false,\r\n stacked: true,\r\n barThickness: 20,\r\n gridLines: {\r\n display: false,\r\n drawBorder: false,\r\n }\r\n }],\r\n },\r\n tooltips: {\r\n enabled: false,\r\n callbacks: {\r\n label: function(tooltipItems, data) {\r\n return " " + tooltipItems.xLabel + "%";\r\n }\r\n }\r\n },\r\n }\r\n});\r\nChart.pluginService.register({\r\n afterDraw: function(chartInstance) {\r\n var ctx = chartInstance.chart.ctx;\r\n\r\n // render the value of the chart above the bar\r\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, \'normal\', Chart.defaults.global.defaultFontFamily);\r\n ctx.textAlign = \'right\';\r\n ctx.textBaseline = \'center\';\r\n\r\n chartInstance.data.datasets.forEach(function(dataset) {\r\n for (var i = 0; i < dataset.data.length; i++) {\r\n var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;\r\n if (dataset.label[i] == "Confort projet\xc3\xa9") {\r\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x - 8, model.y + 21);\r\n ctx.fillText("\xe2\x96\xb2", model.x + 6, model.y + 19);\r\n } else if (dataset.label[i] == "Confort actuel") {\r\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x - 8, model.y - 14);\r\n ctx.fillText("\xe2\x96\xbc", model.x + 6, model.y - 12);\r\n } else {\r\n ctx.fillText(dataset.label[i] + " (" + dataset.data[i] + "%)", model.x + 130, model.y - 14);\r\n ctx.fillText("\xe2\x96\xbc", model.x + 6, model.y - 12);\r\n }\r\n }\r\n });\r\n }\r\n});Run Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
1654 次 |
| 最近记录: |