javascript - 鼠标移动页面背景渐变变化

标签 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);
});

最佳答案

您可以将处理程序包装在 _.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/

关于javascript - 鼠标移动页面背景渐变变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774652/

相关文章:

HTML CSS 表格宽度不工作

javascript - 为什么我无法选择 select 中的选项?

javascript - 在动态下拉列表AngularJS中使用ng-init

javascript - 选择器中的 jquery 字符串连接

css - 让 EQCSS 和 Angular2+ 正常工作

javascript - 聚焦选择元素的最近 Div

javascript - 有什么方法可以用变量的新值动态地重新加载 SASS 吗?

javascript - 如何在 jquery slider 上显示图像内的跨度

javascript - 有没有办法缩小图像的大小,这样加载时间就不会严重陷入困境

javascript - 两个函数不能一起工作(jQuery)