根据倒计时更改div的颜色

时间:2016-09-02 18:28:20

标签: javascript jquery

我不知道如何恰当地说出这个,但我有一个倒计时,我希望颜色从绿色变为红色,渐渐变化(如果有意义,就像渐变一样),因为计时器倒计时。因此,当它在25分钟时它变为绿色,并且在它到达00:00:00时完成其变为红色。

我知道你可以根据时间改变它,但我无法找到逐步改变的解决方案。

我尝试了以下JS,然后在点击&#34时调用changeColor();去"但这有点乱,停止倒计时工作,我不知道从哪里开始:

function changeColor() {
    if (document.getElementById("time").innerHTML === "00:00:00") {
        $("#tomato").css("background-color", "#37bd5b");
    } else if (document.getElementById("time").innerHTML !== "00:00:00") {
        $("#tomato").css("background-color", "#D71F27");
}

这里是fiddle,我希望红色bg在点击后开始更改。

编辑:我最终想要添加更改倒计时分钟的功能。

3 个答案:

答案 0 :(得分:1)

您可以使用jquery animate函数。首先包括jquery ui,以便颜色功能起作用。然后获取点击go的时间。

var pieces = startTime.split(":");
var time = new Date();
time.setHours(pieces[0]);
time.setMinutes(pieces[1]);
time.setSeconds(pieces[2]);
var timerSec=time.getSeconds()+time.getMinutes()*60+time.getHours()*3600;
$('#tomato').animate({
  backgroundColor: "#00e50b"
}, timerSec*1000);

reset点击中,您还需要添加

$('#tomato').stop();
$('#tomato').attr('style', 'background-color:#D72028');

fiddle - 我改变了小提琴中的时间,使其更短,更容易看到结果。

答案 1 :(得分:0)

也许就像this

功能:

function set_background(value)
{
    var hue = ((1-value)*120).toString(10);
  return ["hsl(",hue,",100%,50%)"].join("");
}

答案 2 :(得分:0)

我们知道rgb中的绿色是rgb(0,255,00),红色是rgb(255,0,0)。然而,你有很多秒钟在25分钟 - 1500秒。你想使用:

$("#div-id").css("background-color","rgb(x, y, 0)");

设置颜色的背景,其中x和y应介于0到255之间。

如果以秒为单位的当前计数为1500,我们希望x = 255且y = 0.如果计数为0,我们希望x = 0且y = 255。

当计数为1500时,我们需要找到我们将计数乘以得到255的线性因子。

1500 * factor = 255
factor = 0.17 

因此,如果在每次计数时,我们乘以0.17,我们将得到一个介于0到255之间的数字,用于rgb背景颜色中的红色。

1500*0.17 = 255
750 * 0.17 = 127.5
0 * 0.17 = 0

这适用于红色。对于绿色,我们想要扭转行为。在1500,我们希望值为0。

(1500-curCount) * 0.17 = greenVal

如果curCount = 1500,我们得到一个greenVal为0.如果curCount为0,我们得到一个255的greenVal。如果curCount是750,我们得到一个127.5的greenVal。

因此,每次减少计数时,使用上面显示的两个等式计算绿色和红色值,并使用上面的jquery语句将div的背景颜色设置为生成的颜色。