jquery圈子进度|更改圆圈进度的颜色
jquery circle progress | Change color on circle progress
我正在使用 jquery-circle-progress 插件来画一个圆。随着圆圈大小的增加(或减小),我希望圆圈的颜色相应地平滑变化。
我编写了一个具有 100 种不同渐变的函数,从绿色到橙色再到红色。说得更清楚:圆圈应该始终是一种颜色,但是当圆圈移动时,该颜色的渐变必须无缝变化。
这是我已有的片段:
https://codepen.io/anon/pen/QxqBVq
如您所见,当圆圈大小发生变化时,圆圈的颜色会立即变为红色。怎样才能让颜色变化更顺畅?
HTML:
<div class="circle"></div>
使用一些默认设置初始化圆:
var circle = $('.circle').circleProgress({
value: 0.50,
fill: { color: 'rgb(127,127,0)' }
});
渐变的自定义 JavaScript 函数:
function setGradient(value) {
// Start with: "if (value == 0.01)"
if (value == 0.50) {
color = 'rgb(127,127,0)';
}
if (value == 0.51) {
color = 'rgb(132,122,0)';
}
if (value == 0.52) {
color = 'rgb(137,117,0)';
}
if (value == 0.53) {
color = 'rgb(142,112,0)';
}
if (value == 0.54) {
color = 'rgb(147,107,0)';
}
if (value == 0.55) {
color = 'rgb(153,102,0)';
}
if (value == 0.56) {
color = 'rgb(158,96,0)';
}
if (value == 0.57) {
color = 'rgb(163,91,0)';
}
if (value == 0.58) {
color = 'rgb(168,86,0)';
}
if (value == 0.59) {
color = 'rgb(173,81,0)';
}
if (value == 0.60) {
color = 'rgb(178,76,0)';
}
// ... etc until: "if (value == 1.00)"
return color;
}
几秒后圆圈变化:
setTimeout(function() {
circle.circleProgress('value', 0.60);
circle.one('circle-animation-progress', function() {
$(this).circleProgress({
fill: { color: setGradient(circle.circleProgress('value')) },
})
});
},3000);
Here您想要的效果的实例。
您会注意到有两件事发生了变化。
首先,circle-animation-progress
更改了 instance.arcFill
并且不再触发 circleProgress
。为了获得新颜色,我传递了 stepValue
而不是 value
.
var circle = $(".circle")
.circleProgress({
value: 0.5,
fill: "rgb(127,127,0)"
})
.on("circle-animation-progress",
function(event, animationProgress, stepValue) {
var instance = $(this).data("circle-progress");
instance.arcFill = setGradient(stepValue);
});
setTimeout(function() {
circle.circleProgress("value", 0.6);
}, 3000);
其次,setGradient
略有不同。由于 stepValue
是一个大的十进制数,您必须将其作为特定值进行比较,而不是像下面的示例那样比较:
function setGradient(value) {
// Start with: "if (value == 0.01)"
let color = "rgb(127,127,0)";
if (value >= 0.5) {
color = "rgb(127,127,0)";
}
if (value >= 0.51) {
color = "rgb(132,122,0)";
}
if (value >= 0.52) {
color = "rgb(137,117,0)";
}
if (value >= 0.53) {
color = "rgb(142,112,0)";
}
if (value >= 0.54) {
color = "rgb(147,107,0)";
}
if (value >= 0.55) {
color = "rgb(153,102,0)";
}
if (value >= 0.56) {
color = "rgb(158,96,0)";
}
if (value >= 0.57) {
color = "rgb(163,91,0)";
}
if (value >= 0.58) {
color = "rgb(168,86,0)";
}
if (value >= 0.59) {
color = "rgb(173,81,0)";
}
if (value >= 0.6) {
color = "rgb(178,76,0)";
}
// ... etc until: "if (value == 1.00)"
return color;
}
我正在使用 jquery-circle-progress 插件来画一个圆。随着圆圈大小的增加(或减小),我希望圆圈的颜色相应地平滑变化。
我编写了一个具有 100 种不同渐变的函数,从绿色到橙色再到红色。说得更清楚:圆圈应该始终是一种颜色,但是当圆圈移动时,该颜色的渐变必须无缝变化。
这是我已有的片段:
https://codepen.io/anon/pen/QxqBVq
如您所见,当圆圈大小发生变化时,圆圈的颜色会立即变为红色。怎样才能让颜色变化更顺畅?
HTML:
<div class="circle"></div>
使用一些默认设置初始化圆:
var circle = $('.circle').circleProgress({
value: 0.50,
fill: { color: 'rgb(127,127,0)' }
});
渐变的自定义 JavaScript 函数:
function setGradient(value) {
// Start with: "if (value == 0.01)"
if (value == 0.50) {
color = 'rgb(127,127,0)';
}
if (value == 0.51) {
color = 'rgb(132,122,0)';
}
if (value == 0.52) {
color = 'rgb(137,117,0)';
}
if (value == 0.53) {
color = 'rgb(142,112,0)';
}
if (value == 0.54) {
color = 'rgb(147,107,0)';
}
if (value == 0.55) {
color = 'rgb(153,102,0)';
}
if (value == 0.56) {
color = 'rgb(158,96,0)';
}
if (value == 0.57) {
color = 'rgb(163,91,0)';
}
if (value == 0.58) {
color = 'rgb(168,86,0)';
}
if (value == 0.59) {
color = 'rgb(173,81,0)';
}
if (value == 0.60) {
color = 'rgb(178,76,0)';
}
// ... etc until: "if (value == 1.00)"
return color;
}
几秒后圆圈变化:
setTimeout(function() {
circle.circleProgress('value', 0.60);
circle.one('circle-animation-progress', function() {
$(this).circleProgress({
fill: { color: setGradient(circle.circleProgress('value')) },
})
});
},3000);
Here您想要的效果的实例。
您会注意到有两件事发生了变化。
首先,circle-animation-progress
更改了 instance.arcFill
并且不再触发 circleProgress
。为了获得新颜色,我传递了 stepValue
而不是 value
.
var circle = $(".circle")
.circleProgress({
value: 0.5,
fill: "rgb(127,127,0)"
})
.on("circle-animation-progress",
function(event, animationProgress, stepValue) {
var instance = $(this).data("circle-progress");
instance.arcFill = setGradient(stepValue);
});
setTimeout(function() {
circle.circleProgress("value", 0.6);
}, 3000);
其次,setGradient
略有不同。由于 stepValue
是一个大的十进制数,您必须将其作为特定值进行比较,而不是像下面的示例那样比较:
function setGradient(value) {
// Start with: "if (value == 0.01)"
let color = "rgb(127,127,0)";
if (value >= 0.5) {
color = "rgb(127,127,0)";
}
if (value >= 0.51) {
color = "rgb(132,122,0)";
}
if (value >= 0.52) {
color = "rgb(137,117,0)";
}
if (value >= 0.53) {
color = "rgb(142,112,0)";
}
if (value >= 0.54) {
color = "rgb(147,107,0)";
}
if (value >= 0.55) {
color = "rgb(153,102,0)";
}
if (value >= 0.56) {
color = "rgb(158,96,0)";
}
if (value >= 0.57) {
color = "rgb(163,91,0)";
}
if (value >= 0.58) {
color = "rgb(168,86,0)";
}
if (value >= 0.59) {
color = "rgb(173,81,0)";
}
if (value >= 0.6) {
color = "rgb(178,76,0)";
}
// ... etc until: "if (value == 1.00)"
return color;
}