2016-02-04 32 views
0

如果屏幕左侧是特定的rgb值,右侧是另一个,如何根据鼠标位置上的鼠标位置平滑过渡鼠标移动时两种颜色之间的转换使用Javascript

因此,当鼠标位于最左侧时,它是一种颜色,最右侧是另一种颜色。在中间它将是中途点。

类似这样的: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种颜色,但为了简单起见...)。我只是不能在我的脑海中工作如何在两种颜色之间切换...

任何想法?

谢谢。

+0

为什么不使用CSS转换? – M98

+1

我已经更新了这个问题,希望它更清楚。它应该根据鼠标的位置改变颜色,这样当你不在最左边或最右边时,它们之间会有一定程度的颜色。 – evu

回答

2

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

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

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

如果要使用此方法四种颜色,你的计算将变得更加复杂,除非你也可以定义为中心的颜色。

+0

是的,这与我一直在做的相似,但你看它是如何从黑色变成红色而不是红色变成橙色?这就是我正在努力的一点。 – evu

+0

我改进了小提琴使用所有三种颜色。最小/最大变量名称现在有点误导,应该是橙色/绿色。 – KWeiss

+0

啊,这看起来很像我在找什么! :) 谢谢。那么我会修补它。 – evu

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属性做到这一点。

+0

对不起,更新了这个问题。在这种情况下,它会从一个变成另一个(它回答原来的),但它不会根据鼠标的位置而改变。请参阅编辑了解更多信息。 – evu

+0

你确定这不起作用吗?如果您在我已附加的jsfiddle中输入,则可以在结果页面的顶部或底部检查移动鼠标。在底部它变成蓝色。最上面它变成橙色。所有与转型。 –

+0

不,你是对的,它正在工作,但它不是我想找的方式。我想要这样的东西,http://jsfiddle.net/j08691/BrZjJ/,但在两种颜色之间,不是任意的。 – evu

相关问题