简体   繁体   English

色彩变化的径向动画

[英]Radial animation with changing colour

So, I have this "widget" that is like a radial progress bar. 因此,我有这个“小部件”,就像一个放射状的进度条。 I have it working currently pretty well. 我目前运作良好。 It animates when the value changes which is great, but I would like to use a traffic light colour scheme, so that the closer it gets to 100% the redder it gets, the closer to 0% the greener it gets and 50% is yellow. 当值变化很大时会进行动画处理,但是我想使用交通信号灯配色方案,以便它越接近100%就会变得越红,接近0%就会变得越绿,而50%则变成黄色。

The HTML I have for this looks a bit like this: 我为此使用的HTML看起来像这样:

        <div class="radial-progress" data-progress="{{ controller.progress }}">
        <div class="circle">
            <div class="mask full">
                <div class="fill"></div>
            </div>
            <div class="mask half">
                <div class="fill"></div>
                <div class="fill fix"></div>
            </div>
            <div class="shadow"></div>
        </div>
        <div class="inset">
            <div class="percentage">
                <span id="progress">0</span>%
            </div>
        </div>
    </div>

    <div class="footer">
        <div>
            <div>
                <strong>Credit limit: </strong><span class="pull-right">{{
                    controller.data.currencyCharacter }}{{ controller.data.creditLimit |
                    number: 2}}</span>
            </div>
            <div>
                <strong>Available credit: </strong><span class="pull-right"
                    ng-class="{'lead text-danger': controller.data.availableCredit < 0 }">{{
                    controller.data.currencyCharacter}}{{
                    controller.data.availableCredit | number: 2}}</span>
            </div>
        </div>
    </div>

As you may have noticed, I am using angular js so I am not using jQuery, so pure javascript is needed if any javascript is needed at all! 您可能已经注意到,我使用的是angular js,所以我没有使用jQuery,因此,如果根本不需要任何javascript,就需要纯javascript!

I have set up a codepen so you can see my current version: 我已经设置了一个Codepen,因此您可以看到我的当前版本:

https://codepen.io/r3plica/pen/JJpwRe https://codepen.io/r3plica/pen/JJpwRe

If someone could help me, that would be awesome. 如果有人可以帮助我,那太好了。

See here I added following javascript 看到这里我添加了以下javascript

var percentColors = [
{ pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },
{ pct: 0.5, color: { r: 0xff, g: 0xff, b: 0 } },
{ pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ];

var getColorForPercentage = function(pct) {
    for (var i = 1; i < percentColors.length - 1; i++) {
        if (pct < percentColors[i].pct) {
            break;
        }
    }
    var lower = percentColors[i - 1];
    var upper = percentColors[i];
    var range = upper.pct - lower.pct;
    var rangePct = (pct - lower.pct) / range;
    var pctLower = 1 - rangePct;
    var pctUpper = rangePct;
    var color = {
        r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),
        g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),
        b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)
    };
    return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';
    // or output as hex if preferred
} 

And modified your update function, as well as I added transition:0.5s; 并修改了您的更新功能,以及我添加了transition:0.5s; to you .fill css 给你.fill CSS

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM