代码之家  ›  专栏  ›  技术社区  ›  mjpramos

鼠标移动时页面背景渐变变化

  •  4
  • mjpramos  · 技术社区  · 7 年前

    我有一个通过CSS加载页面时应用了渐变的页面,我想在鼠标移动时为页面设置渐变颜色和渐变度(线性渐变-4种不同的颜色都会退化为白色)的动画。 如果我只使用两种颜色,效果很好。但我想在鼠标移动时从数组中获得随机颜色,但它会闪烁。有什么解决办法吗?

    这是我的 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 回复  |  直到 7 年前
        1
  •  0
  •   Marinos An    7 年前

    您可以将处理程序包装在 _.throttle ,然后玩米利斯,直到得到可接受的结果。

    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/

    更新时间: 实际上,我粘贴了一个错误的链接。这是给 throttle https://jsfiddle.net/g137be71/82/

        2
  •  0
  •   oma    7 年前

    我想你需要输入jQueryUI,然后你可以使用 animate() 更改颜色。请检查此处:

    https://jqueryui.com/animate/

    因此,您应该使用以下内容:

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