jQuery animate backgroundColor
The color plugin is only 4kb so much cheaper than the UI library. Of course you'll want to use a decent version of the plugin and not some buggy old thing which doesn't handle Safari and crashes when the transitions are too fast. Since a minified version isn't supplied you might like test various compressors and make your own min version. YUI gets the best compression in this case needing only 2317 bytes and since it is so small - here it is:
(function (d) {
d.each(["backgroundColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "color", "outlineColor"], function (f, e) {
d.fx.step[e] = function (g) {
if (!g.colorInit) {
g.start = c(g.elem, e);
g.end = b(g.end);
g.colorInit = true
}
g.elem.style[e] = "rgb(" + [Math.max(Math.min(parseInt((g.pos * (g.end[0] - g.start[0])) + g.start[0]), 255), 0), Math.max(Math.min(parseInt((g.pos * (g.end[1] - g.start[1])) + g.start[1]), 255), 0), Math.max(Math.min(parseInt((g.pos * (g.end[2] - g.start[2])) + g.start[2]), 255), 0)].join(",") + ")"
}
});
function b(f) {
var e;
if (f && f.constructor == Array && f.length == 3) {
return f
}
if (e = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)) {
return [parseInt(e[1]), parseInt(e[2]), parseInt(e[3])]
}
if (e = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)) {
return [parseFloat(e[1]) * 2.55, parseFloat(e[2]) * 2.55, parseFloat(e[3]) * 2.55]
}
if (e = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)) {
return [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]
}
if (e = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)) {
return [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)]
}
if (e = /rgba\(0, 0, 0, 0\)/.exec(f)) {
return a.transparent
}
return a[d.trim(f).toLowerCase()]
}
function c(g, e) {
var f;
do {
f = d.css(g, e);
if (f != "" && f != "transparent" || d.nodeName(g, "body")) {
break
}
e = "backgroundColor"
} while (g = g.parentNode);
return b(f)
}
var a = {
aqua: [0, 255, 255],
azure: [240, 255, 255],
beige: [245, 245, 220],
black: [0, 0, 0],
blue: [0, 0, 255],
brown: [165, 42, 42],
cyan: [0, 255, 255],
darkblue: [0, 0, 139],
darkcyan: [0, 139, 139],
darkgrey: [169, 169, 169],
darkgreen: [0, 100, 0],
darkkhaki: [189, 183, 107],
darkmagenta: [139, 0, 139],
darkolivegreen: [85, 107, 47],
darkorange: [255, 140, 0],
darkorchid: [153, 50, 204],
darkred: [139, 0, 0],
darksalmon: [233, 150, 122],
darkviolet: [148, 0, 211],
fuchsia: [255, 0, 255],
gold: [255, 215, 0],
green: [0, 128, 0],
indigo: [75, 0, 130],
khaki: [240, 230, 140],
lightblue: [173, 216, 230],
lightcyan: [224, 255, 255],
lightgreen: [144, 238, 144],
lightgrey: [211, 211, 211],
lightpink: [255, 182, 193],
lightyellow: [255, 255, 224],
lime: [0, 255, 0],
magenta: [255, 0, 255],
maroon: [128, 0, 0],
navy: [0, 0, 128],
olive: [128, 128, 0],
orange: [255, 165, 0],
pink: [255, 192, 203],
purple: [128, 0, 128],
violet: [128, 0, 128],
red: [255, 0, 0],
silver: [192, 192, 192],
white: [255, 255, 255],
yellow: [255, 255, 0],
transparent: [255, 255, 255]
}
})(jQuery);
How to animate background color in jQuery?
You need to import an additional plugin such as jQuery UI in order to support color in your animate()
function as jQuery alone doesn't.
$("#colorBtn").click(function() {
$('#demodiv').animate({backgroundColor: 'blue'})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<input type="button" id="colorBtn" value="Change Color"/><br>
<div id="demodiv" style="height:100px;width:100px;background:red"></div>
jQuery Animate() and BackgroundColor
jQuery cannot animate colours by default. In order to animate colours, use the official jQuery.Color plugin.
All animated properties should be animated to a single numeric value, except as noted below; most properties that are non-numeric cannot be animated using basic jQuery functionality (For example, width, height, or left can be animated but background-color cannot be, unless the jQuery.Color() plugin is used).
Source
jQuery Animate not working on background-color property
As per jQuery API docs:
The .animate() method allows us to create animation effects on any numeric CSS property.
Animation Properties and Values
All animated properties should be animated to a single numeric value, except as noted below; most properties that are non-numeric cannot be animated using basic jQuery functionality (For example,
width
,height
, orleft
can be animated butbackground-color
cannot be, unless the jQuery.Color plugin is used)
emphasis is mine
Background Color is not a numeric property and so it cannot be animated using .animate()
.
How change background-color with jquery animation, like a transition
Sorry with all colors you can do this:
function spectrum(){
var mcolors = ['green', 'blue', 'red'];
var time = 500;
$.each(mcolors, function(index, value){
setTimeout( function(){
$('.background').css({
transition: 'background-color 1s ease-in-out',
"background-color": value
}); }, time)
time += 1000;
});}
Animate (jQuery) background color not working on scroll function
A solution is css3
. you can use transition
to make background color smooth via addClass
and removeClass
to toggle css class with jquery.
$(window).scroll(function() {
var top = $(window).scrollTop();
if (top > 0) {
$('.menu').addClass('newColor');
} else {
$('.menu').removeClass('newColor');
}
});
JSFiddle
If you want ,you can include jquery ui
library and make animate
work.
$(window).scroll(function() {
var top = $(window).scrollTop();
if (top > 0) {
$('.menu').stop(true, true).animate({
backgroundColor: '#ED1847'
})
} else {
$('.menu').stop(true, true).animate({
backgroundColor: '#383737'
})
}
});
JSFiddle
jQuery animate on scroll backgroundColor not changing
Try including jQuery UI
, as .animate()
does not animate color without modifications or a color plugin; see .animate()
Animation Properties and Values
All animated properties should be animated to a single numeric
value, except as noted below; most properties that are non-numeric
cannot be animated using basic jQuery functionality (For example,
width
,height
, orleft
can be animated butbackground-color
cannot be, unless the jQuery.Color plugin is used).
also adjusting selector at positionofscroll
to $(this).scrollTop()
; changing comparison operator to >
at if
$(function() {
var content = $(".content");
$(".box").scroll(function(event) {
var positionofscroll = $(this).scrollTop();
console.log(positionofscroll);
if (positionofscroll > 0) {
content.stop().animate({
backgroundColor: "rgba(105, 63, 63, 0.69)"
}, 500);
} else {
content.stop().animate({
backgroundColor: "red"
}, 500);
}
}); //scroll
});
.box {
width: 100%;
height: 500px;
background: gray;
overflow: auto;
}
.content {
color: white;
display: flex;
justify-content: center;
align-items: center;
height: 1000px;
background: red;
font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0-beta.1/jquery-ui.min.js"></script>
<!--Shadow Box when user scrolls -->
<div class="box">
<div class="content">
I'm content
</div>
</div>
Jquery animate navigation color
use this code in your css
.nav{
transition-duration: 2s;
}
DEMO
Related Topics
Chrome: Timeouts/Interval Suspended in Background Tabs
Jqgrid Server Side Error Message/Validation Handling
Es6 Class Variable Alternatives
How to Have a Default Option in Angular.Js Select Box
Why Don't Logical Operators (&& and ||) Always Return a Boolean Result
Is It Spread "Syntax" or the Spread "Operator"
Babel 6 Regeneratorruntime Is Not Defined
Check If Element Is Visible in Dom
Using Jquery to Test If an Input Has Focus
Difference Between Innertext, Innerhtml and Value
Make Iframe Height Dynamic Based on Content Inside- Jquery/Javascript
What Is the Significance of the JavaScript Constructor Property
How to Set a Cookie for Another Domain
Rotate the Elements in an Array in JavaScript
Cross-Browser JavaScript Xml Parsing