jQuery Animate没有处理background-color属性

时间:2016-01-17 12:26:57

标签: javascript jquery css jquery-animate

我正在使用jQuery .animate()函数,并最终尝试根据用户滚动的像素数更改其中一个background-color的{​​{1}}。令我惊讶的是,它没有用。我尝试使用div函数,但效果很好。请参考底部的jsFiddle链接。

有人可以向我解释为什么会这样吗?

jsFiddle链接:https://jsfiddle.net/ag_dhruv/cb2sypmu/

5 个答案:

答案 0 :(得分:9)

根据jQuery API docs

  

.animate()方法允许我们在任何 数字CSS属性 上创建动画效果。

     

动画属性和值

     

除非如下所述,否则应将所有动画属性设置为单个数值。大多数非数字属性无法使用基本jQuery功能进行动画处理(例如,widthheightleft可以设置动画 但{{1} }不能 ,除非使用了jQuery.Color插件)

重点是我的

背景颜色不是数字属性,因此无法使用background-color设置动画。

答案 1 :(得分:4)

如果您想要animate background-color属性,则需要包含jQueryUI或添加此插件:

$(function() {
  var state = true;
  $("#button").click(function() {
    if (state) {
      $("#effect").animate({
        backgroundColor: "#aa0000",
        color: "#fff",
        width: 500
      }, 1000);
    } else {
      $("#effect").animate({
        backgroundColor: "#fff",
        color: "#000",
        width: 240
      }, 1000);
    }
    state = !state;
  });
});
.toggler {
  width: 500px;
  height: 200px;
  position: relative;
}
#button {
  padding: .5em 1em;
  text-decoration: none;
}
#effect {
  width: 240px;
  height: 135px;
  padding: 0.4em;
  position: relative;
  background: #fff;
}
#effect h3 {
  margin: 0;
  padding: 0.4em;
  text-align: center;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div class="toggler">
  <div id="effect" class="ui-widget-content ui-corner-all">
    <h3 class="ui-widget-header ui-corner-all">Animate</h3>
    <p>
      Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
    </p>
  </div>
</div>
<button id="button" class="ui-state-default ui-corner-all">Toggle Effect</button>

  

jQuery UI捆绑了jQuery Color插件,它提供了颜色动画以及许多用于处理颜色的实用功能。

答案 2 :(得分:2)

只是对现有答案的补充:如果您不想使用jQuery UI,则可以使用此jQuery插件(仅限2.7kB):

http://www.bitstorm.org/jquery/color-animation/

您可以从项目的网站下载jquery.animate-colors.jsjquery.animate-colors.min.js,或者从CDN中包含它:

<script src="//cdn.jsdelivr.net/jquery.color-animation/1/mainfile"></script>

包含后,您可以通过以下方式使用彩色动画:

$('#demodiv').animate({color: '#E4D8B8'})
$('#demodiv').animate({backgroundColor: '#400101'})
$('#demodiv').animate({borderBottomColor: '#00346B'})
$('#demodiv').animate({borderColor: 'darkolivegreen'})
$('#demodiv').animate({color: 'rgba(42, 47, 76, 0.1)'})

答案 3 :(得分:1)

您只能使用jQueryUI为backgroundColor设置动画。 如果你不想使用jQueryUI,你只需要改变一个类,并使用转换在CSS中制作动画。

答案 4 :(得分:0)

您也可以使用jQuery为背景颜色设置动画,而不是使用animate()方法,正如您所注意到的那样,css方法将会这样做。

因为这是一件非常简单的事情,所以不要在代码中包含另一个库,为自己节省http请求,只需使用普通的JS。

此功能可以正常使用:

function changeBG(el,clr){
var elem = document.getElementById(el);
elem.style.transition = "background 1.0s linear 0s";
elem.style.background = clr;
}

链接到工作示例

http://codepen.io/damianocel/pen/wMKowa