鼠标移动页面背景渐变变化
Page background gradient change on mouse move
我有一个页面,通过 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);
});
我认为您需要包含 jQuery UI,然后您可以使用 animate()
来更改颜色。请在此处查看:
所以你应该使用这样的东西:
$( "#selector" ).animate({
backgroundColor: bg
}, 10 );
您可以将处理程序包装在 _.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/
更新:其实我贴错了link。这是给 throttle
的。
https://jsfiddle.net/g137be71/82/
我有一个页面,通过 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);
});
我认为您需要包含 jQuery UI,然后您可以使用 animate()
来更改颜色。请在此处查看:
所以你应该使用这样的东西:
$( "#selector" ).animate({
backgroundColor: bg
}, 10 );
您可以将处理程序包装在 _.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/
更新:其实我贴错了link。这是给 throttle
的。
https://jsfiddle.net/g137be71/82/