【问题标题】:how can i change a specific bar color in chart.js color chartjs如何更改chart.js color chartjs中的特定条形颜色
【发布时间】:2022-11-03 01:35:16
【问题描述】:

我想更改条形图中所选条形的颜色我找到了这段代码但是当我运行代码时显示这个错误myChart.getElementsAtEvent 不是函数 在 HTMLCanvasElement.ChangeColor

这是我的代码

html:

    ```
               <div class="chartBox">
                  <canvas id="myChart"></canvas>
                  <input type="color" id ="colorPicker" hidden/>                      
                </div>
    ```

Javascript代码:

```

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

        <script type="">
            var color = '#456212';
            var lastIndex = null;
            var canvas = document.getElementById("myChart");

          document.getElementById("my-select").addEventListener("change", changeChart);
          document.getElementById("filter").addEventListener("change", filterChart);




          var label = <%- JSON.stringify(x)%>
          var data = [<%= y %>]
          const originalLabels = label;
          const originalData = data ;


          var ctx = document.getElementById('myChart').getContext('2d');
          var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
              labels: originalLabels,
              datasets: [{
                label: '# of Votes',
                data: originalData,
                backgroundColor: [
                  'rgba(255, 99, 132, 0.2)',
                  'rgba(54, 162, 235, 0.2)',
                  'rgba(255, 206, 86, 0.2)',
                  'rgba(75, 192, 192, 0.2)',
                  'rgba(153, 102, 255, 0.2)',
                  'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                  'rgba(255, 99, 132, 1)',
                  'rgba(54, 162, 235, 1)',
                  'rgba(255, 206, 86, 1)',
                  'rgba(75, 192, 192, 1)',
                  'rgba(153, 102, 255, 1)',
                  'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
              }]
            },
            options: {
              scales: {
                y: {
                  beginAtZero: true
                }
              }
            }
          });
canvas.addEventListener("click", ChangeColor, false);

     colorPicker = document.getElementById('colorPicker');

     colorPicker.addEventListener("change", getColor, false);


    function getColor(e){

       //
        console.log(this.lastIndex)
        myChart.data.datasets[0].backgroundColor[lastIndex] =  e.target.value;
        console.log(e.target.value);
        myChart.update();

    }


 function ChangeColor(e){
        e.preventDefault();
        var activePoints = myChart.getElementsAtEvent(e);
        lastIndex = activePoints[0]._index;
        this.color = myChart.data.datasets[0].backgroundColor[lastIndex];
        console.log('Before', this.color);
        var colorPicker = document.getElementById('colorPicker').click();
        //console.log('After',this.color);
    }

</script>

       
```

如何更改特定的条形颜色

我希望用户点击栏然后选择颜色或相反

【问题讨论】:

    标签: javascript html chart.js


    【解决方案1】:

    我准备了一个样品。单击条形元素,颜色选择器可见,当您选择颜色时,图表将更新为新颜色。

    我认为最好使用 CHART.JS 提供的onClick 选项,而不是向画布添加事件侦听器,因为 CHART.JS 选项提供受点击事件影响的元素。

    为了简化示例,请注意 backgroundColor 必须设置为一个数组,其中包含每个条的原始颜色(但您可以添加其他逻辑来管理它)。

    let selected = undefined;
    const chartData = {
      labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
      datasets: [{
        fill: true,
        backgroundColor:  ['cyan','cyan','cyan','cyan','cyan','cyan','cyan'],
        data: [40, 39, 10, 40, 39, 80, 40],
      }]
    };
    const ctx = document.getElementById('myChart');
    const myChart = new Chart(ctx, {
      type: 'bar',
      data: chartData,
      options: {
        onClick(evt, elements, chart) {
          if (elements.length) {
            selected = elements;
            const colorPicker = document.getElementById("colorPicker");
            colorPicker.click();
          }
        }
      }
    });
    document.getElementById("colorPicker").addEventListener("change", setColor);
    function setColor() {
      if (selected && selected.length) {
        const colorPicker = document.getElementById("colorPicker");
        for (const el of selected) {
          const {datasetIndex, index} = el;
          const dataset = myChart.data.datasets[datasetIndex];
          dataset.backgroundColor.splice(index, 1, colorPicker.value);
        }
        myChart.update();
      }
    }
    .myChartDiv {
      max-width: 600px;
      max-height: 400px;
    }
    <script src="https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js"></script>
    <html>
      <body>
        <div class="myChartDiv">
          <canvas id="myChart" width="600" height="400"/>
        </div>
        <input id="colorPicker" type="color" style="visibility: hidden;"/>
      </body>
    </html>

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      相关资源
      最近更新 更多