鼠标移动时页面背景渐变更改

时间:2018-04-11 12:03:29

标签: javascript jquery css linear-gradients

我有一个页面,通过CSS在页面加载时应用渐变,并希望在鼠标移动时交替使用渐变颜色和度数(线性渐变 - 4种不同的颜色都降级为白色)来动画页面。 如果我只使用2种颜色就行了。但我希望在鼠标移动时从阵列中获得随机颜色,但它会闪烁。有什么解决方案吗?

这是我的Fiddle

var colorArr = ['#dfa7ca', '#f7c2b3', '#bae0f1', '#a6d6cb'];
var grFrom = colorArr[Math.floor(Math.random()*colorArr.length)];
var grTo = '#FFFFFF';

$("body").mousemove(function( e ) {
  var x = e.pageX - this.offsetLeft;
  var y = e.pageY - this.offsetTop;
  var grFrom = colorArr[Math.floor(Math.random()*colorArr.length)];//get a new random color
  var xy = (x + y) / 8;
  var w = $(this).width(),
  pct = 360*(+e.pageX)/w,
  bg = "linear-gradient(" + xy + "deg,"+grFrom+","+grTo+")";
  $("body").css("background-image", bg);
});

2 个答案:

答案 0 :(得分:0)

我认为您需要包含jQueryUI,然后您可以使用animate()来更改颜色。请点击这里:

https://jqueryui.com/animate/

所以你应该使用这样的东西:

 $( "#selector" ).animate({
          backgroundColor: bg
        }, 10 );

答案 1 :(得分:0)

您可以将处理程序包装在_.throttle中,然后使用millis,直到获得可接受的结果。

var colorArr = ['#dfa7ca', '#f7c2b3', '#bae0f1', '#a6d6cb'];
var grFrom = colorArr[Math.floor(Math.random()*colorArr.length)];
var grTo = '#FFFFFF';


var wrapped = _.throttle(function(e){
  var x = e.pageX - this.offsetLeft;
  var y = e.pageY - this.offsetTop;
  var grFrom = colorArr[Math.floor(Math.random()*colorArr.length)];
  var xy = (x + y) / 8;
  var w = $(this).width(),
  pct = 360*(+e.pageX)/w,
  bg = "linear-gradient(" + xy + "deg,"+grFrom+","+grTo+")";
  $("body").css("background-image", bg);
},50)//Try increasing/decreasing this value to see the differrence


$("body").mousemove(wrapped);

请参阅: https://jsfiddle.net/g137be71/24/

更新:其实我粘贴了一个错误的链接。这是throttlehttps://jsfiddle.net/g137be71/82/