【问题标题】:jQuery Math for Color Animation - certain Color Range颜色动画的 jQuery 数学 - 某些颜色范围
【发布时间】:2011-04-20 05:45:35
【问题描述】:

我将这个数学用于悬停时的背景颜色动画:

var col = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')';

它会产生随机的 rgb 颜色。确实很好,但我在寻找不同的东西。

有没有人知道一个很好的数学,我可以用它来让随机颜色只在某个颜色范围之外,比如在红色范围之外或在绿色之外?

感谢您的帮助。

@Avinash,这是我现在使用的完整代码。如何包含您的解决方案?

$(document).ready(function () {
    //bg color animation
    original = $('.item,.main-menu-button').css('background-color');
    $('.item,.main-menu-button').hover(function () { //mouseover
        var col = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')'; //random hover color
        $(this).stop().animate({
            'backgroundColor': col
        }, 1000);
    }, function () { //mouseout
        $(this).stop().animate({
            'backgroundColor': '#111'
        }, 500); //original color as in css
    });
});



它不起作用。我最好保持原样。感谢大家的帮助。

【问题讨论】:

标签: jquery math animation colors


【解决方案1】:

要生成一个范围内的随机数,我们需要做一些类似的事情

minValue + random Number * (maxValue - minValue)

也就是说,如果你想创建一个介于 100200 之间的随机数,我们应该这样做

var rand = 100 + Math.floor(Math.random() * (200 - 100));

给出一个介于 100 到 200 之间的随机数

使用这个基本规则,我们可以从给定范围内生成随机颜色

var range = [{0 : 150,1 : 200}, {0 : 200,1 : 230},{0 : 10,1 : 20}];
function rgb() {
  var color  ='rgb(';
  for(var i = 0; i< 3; i++) {
    color += rand(range[i]['0'], range[i]['1']) + ',';
  }
  return color.replace(/\,$/,')')
}

function rand(min, max) {
    return min + Math.floor(Math.random() * (max - min));
}

alert(rgb());

试试这个代码http://jsbin.com/tuday

编辑

$(function() {
    var cache = $('#hover').css('background-color');
    $('#hover').hover(function() {
        $(this).css({'background-color' : rgb() });
    },function() {
        $(this).css({'background-color' : cache });
    });
});

示例http://jsbin.com/iwovew

【讨论】:

  • 嗨,这对我来说是有道理的,但不知何故,我不太擅长 javascript,现在我不知道如何在不破坏其余部分的情况下将其放置在现有脚本中。我想将我的脚本粘贴在这里,但恐怕它不会很好地显示。那么你们如何粘贴那些脚本 sn-ps 呢?准备好揭示这个技巧了吗?
  • @Avinash 这只是一个空洞的错误,因为我意识到我不能只将 sn-ps 粘贴到文本字段中。
  • @hardy 如果您愿意添加代码 sn-p 或其他东西..,您可以编辑您的问题。 SO中发布的每个问题都会有一个edit链接。
  • @Avinash - 是的,我至少知道,但这并不意味着我可以复制和粘贴代码以前复制过。如果我粘贴任何内容,它会在此处显示,没有任何格式,这就是我要说的。你们将您的代码包含在灰色背景中,这似乎很成功,但我不知道该怎么做。另外我认为如果使用“添加评论”字段,这根本不可能。
  • @hardy 对于新手来说很自然。我们不是苛刻的人,我们互相帮助解决问题。 OP 应该提供的唯一东西是适当的资源和示例他的帖子(问题)......这使人们在问题之下。一旦你习惯了它就非常简单,你会喜欢它=)。对于 cmets 中的“灰色背景”,只需用“ `”(波浪号)符号换行您的单词或行。
【解决方案2】:

您应该研究如何将值与 RGB 转换为 HSB(有时称为 HSI)。这种颜色模型的算术非常有意义。例如。要使用红色阴影,您可以从“纯”红色的 HSB 值(0、100、100)开始。更改 S=50% 为您提供“更灰”的红色阴影。将 B=50% 更改为“更深”的红色阴影。

【讨论】:

    【解决方案3】:

    生成黑色到红色范围之外的随机颜色:

    var col = 'rgb(' + (Math.floor(Math.random() * 256)) + ',0,0)';
    

    【讨论】:

    • 实际上,sn-p 让我对整个事情有了更好的理解。我正在玩它。感谢您的宝贵时间。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多