【问题标题】:Transition between two colours on mouse move with Javascript使用Javascript在鼠标移动时两种颜色之间的转换
【发布时间】:2016-02-04 18:08:51
【问题描述】:

如果屏幕的左半部分是一个特定的 rgb 值,而右半部分是另一个,如何在 mousemove 上在这两者之间平滑过渡取决于鼠标位置

所以当鼠标在最左边时,它是一种颜色,而最右边是另一种颜色。中间就是中间点。

类似这样的东西:http://jsfiddle.net/j08691/BrZjJ/ - 但基于设定的颜色,而不是任意颜色。

var $el = $('div');

var p_x, p_y, 
    window_width = window.innerWidth, 
    window_height = window.innerHeight;

var m = {
        moving_left: false,
        moving_up: false,
        last_x: 0,
        last_y: 0,
        x: 0,
        y: 0
    };

var colors = {
        orange: { r: 238, g: 119, b: 0 },
        blue: { r: 40, g: 203, b: 215 }
    };

$el.on('mousemove', function(e){
    m.x = e.pageX;
    m.y = e.pageY;

    m.moving_left   = (m.x < m.last_x) ? true : false;
    m.moving_up     = (m.y < m.last_y) ? true : false;

    m.last_x = m.x;
    m.last_y = m.y;

});

function animateBackground() {
    p_width     = m.x / window_width;
    p_height    = m.y / window_height;

    p_x = p_width.toFixed(2);
    p_y = p_height.toFixed(2);

    switch(true) {
        // top left
        case p_x <= 0.5 && p_y <= 0.5:
            fr = colors.orange.r; 
            fg = colors.orange.g; 
            fb = colors.orange.b;
            break;

        // bottom right
        default:
            fr = colors.blue.r; 
            fg = colors.blue.g; 
            fb = colors.blue.b;
            break;
    }

    $el.css({
        backgroundColor: 'rgb('+fr+', '+fg+', '+fb+')'
    });

  requestAnimationFrame(animateBackground);

}

requestAnimationFrame(animateBackground);

https://jsfiddle.net/o32juay5/

我正在使用与上述类似的东西(除了在四个角上使用 4 种颜色,但为简单起见......)。我只是不知道如何在两种颜色之间转换......

有什么想法吗?

谢谢。

【问题讨论】:

  • 为什么不使用 CSS 过渡?
  • 我已经更新了这个问题,希望它更清楚。它应该根据鼠标的位置改变颜色,这样当你不在最左边或最右边时,它会在两者之间有某种程度的颜色。

标签: javascript jquery css


【解决方案1】:

您需要根据鼠标位置以数学方式计算颜色。

对于每个R、G、B值:取两种颜色的值,确定它们之间的范围,根据鼠标位置在该范围内选择一个位置,并将它们组合成一个background-color来使用在 CSS 中。

https://jsfiddle.net/kbpyxxcn/6/

如果你想用这个方法用四种颜色,你的计算会变得更复杂,除非你也为中心定义一种颜色。

【讨论】:

  • 是的,这与我一直在做的类似,但是您看到它是如何从黑色变为红色而不是从红色变为橙色的吗?这就是我正在努力解决的问题。
  • 我改进了小提琴以使用所有三种颜色。最小/最大变量名称现在有点误导,应该是橙色/绿色。
  • 啊,这看起来很像我要找的东西! :) 谢谢。到时候我会修修补补的。
【解决方案2】:

添加 CSS 属性 transition 就可以了:

https://jsfiddle.net/o32juay5/2/

div {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  -ms-transition: background-color 1s;
  -webkit-transition: background-color 1s;
  transition: background-color 1s;
}

如果你用 javascript 来做,性能会低于这个 css 属性。

【讨论】:

  • 抱歉,已更新问题。在这种情况下,它会从一个变为另一个(回答原始),但它不会根据鼠标的位置而改变。查看编辑了解更多信息。
  • 你确定这不起作用吗?如果您输入我已附加的 jsfiddle,您可以在结果页面的顶部或底部检查过渡移动鼠标。在底部它变为蓝色。在顶部它变为橙色。都有过渡。
  • 不,你是对的,它正在工作,但它没有按照我正在寻找的方式工作。我想要这样的东西,jsfiddle.net/j08691/BrZjJ,但在两种颜色之间,而不是任意颜色。
  • 我认为他需要在不同的鼠标光标位置上使用不同的颜色......也许你必须再次阅读他的问题
  • 您需要进行计算以计算出 RGB 值 edit:您需要计算出两个值之间的差异,然后根据鼠标计算其中的一小部分位置,然后添加到第一个颜色值。
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2015-12-11
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多