【问题标题】:How to change the background color of pie slice with JavaScript?如何用 JavaScript 改变饼图的背景颜色?
【发布时间】:2017-08-30 20:28:37
【问题描述】:

我正在尝试构建一个饼图,该饼图根据范围输入的值动态变化。

这是我到目前为止所做的:https://codepen.io/anon/pen/wqQLPy

const $slider = document.querySelector('input[type=range]');
const $line2 = document.querySelector('.line2');

$slider.addEventListener('input', handleChange);

function handleChange() {
  //$currrentValue.textContent = this.value;
  const degrees = 90 + ((this.value / 100) * 360);
  $line2.style.transform = `rotate(${degrees}deg)`;
}
.pie {
  width: 250px;
  height: 250px;
  margin: 0 auto;
  border-radius: 50%;
  border: 3px solid white;
  position: relative;
  background: #ffc600;
  overflow: hidden;
}

.line {
  width: 50%;
  height: 2px;
  background: #555;
  position: absolute;
  top: 50%;
  transform-origin: 100%;
  transform: rotate(90deg);
  transition: all .2s linear;
}

.line2 {
  transform: rotate(180deg);
  /* When input value is 25 (default) */
}
<input type="range" min="0" max="100" value="25">

<div class="pie">
  <div class="line line1"></div>
  <div class="line line2"></div>
</div>

我的问题是 - 如何为切片(两行之间的区域)设置不同的背景颜色?

例子:

【问题讨论】:

    标签: javascript css charts pie-chart


    【解决方案1】:

    这个东西最好用svg 试试看

    const $slider = document.querySelector('input[type=range]');
    const $currrentValue = document.querySelector('.current-value');
    const $circle = document.querySelector('.circle');
    
    $slider.addEventListener('input', handleChange);
    
    function handleChange() {
      
        $currrentValue.textContent = this.value;
    
        const degrees = this.value;
    
        $circle.style = 'stroke-dasharray:'+degrees+' 150';
    }
    body {
      text-align: center;
      font-size: 2em;
    }
    
    input {
        width: 300px;
        max-width: 80%;
    }
    
    input:hover {
      cursor: pointer;
    }
    
    .current-value {
        position: relative;
        top: -30px;
        left: -7px;
        font-weight: bold;
    }
    
    .pie{
      border-radius: 50%;
    }
    
    .pie circle {
      fill: yellow;
      stroke: red;
      stroke-width: 30;
    }
    <p>0 <input type="range" min="0" max="100" value="25"> 100</p>
    <p class="current-value">25</p>
    
    <div style="margin:0 auto ;width:100px; height: 100px;">
    <svg class="pie" viewBox="0 0 30 30">
    <circle r="15" cx="15" cy="15" transform="rotate(45,15,15)" />
      <circle class="circle"  style="stroke-dasharray: 10.5 150;" r="15" cx="15" cy="15" />
    
    </svg>
    </div>

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 2013-04-28
      • 2012-10-25
      • 1970-01-01
      • 2012-04-02
      • 2022-11-18
      • 1970-01-01
      相关资源
      最近更新 更多