How do I animate a background color to transparent in jQuery?

后端 未结 12 1763
慢半拍i
慢半拍i 2020-12-09 14:46

I can animate from transparent to color, but when I tell jquery to animate the backgroundColor: \'transparent\' it just changes to white. Any idea how to fix this?

相关标签:
12条回答
  • 2020-12-09 15:07

    I changed Shog9's code a bit to fit my needs. It's sort of like the jQuery UI Highlight, only it does not fade into white. It's not perfect, but it works on most elements

    function highlight(element, color, speed) {
    if (speed == null) speed = "fast";
    var e;
    var position;
    element.each(function() {
        e = $(this);
        position = e.css('position');
        if (position != 'absolute')
            e.css('position', 'relative');
        log(position);
        e.append($("<div>")
            .css({
                backgroundColor: color,
                position: 'absolute',
                top: 0,
                left: 0,
                zIndex: -1,
                display: "none",
                width: e.width(),
                height: e.height()
            }).fadeIn(speed).fadeOut(speed, function() { $(this).remove(); e.css('position', position); })
    
          );
    }); }
    
    0 讨论(0)
  • 2020-12-09 15:08

    Use jQuery Color plugin: https://github.com/jquery/jquery-color

    It will get your transparent as well as rgba animations working properly.

    0 讨论(0)
  • 2020-12-09 15:08

    You have to chain it.

    For example, you can't do this:

    $('#panel').animate({'backgroundColor' : 'rgba(255,255,0,0.7', 'opacity': 1}, 3000);
    

    or even

    $('#panel').animate({'background-color' : 'yellow', 'opacity': 1}, 3000);
    

    but you can do this:

    $('#panel').css('background-color', 'rgba(255,255,0,0.7)').animate({'opacity': 1}, 3000);
    
    0 讨论(0)
  • 2020-12-09 15:17

    I used the function parameter to remove the style after the animation was done:

    $('[orgID=' + orgID + 'bg]').animate({ backgroundColor: "white" }, 300, "linear", function()
     {
         $('[orgID=' + orgID + 'bg]').css('background-color', '');
    });
    

    It worked great.

    0 讨论(0)
  • 2020-12-09 15:21

    I wanted to do this and since I couldn't find it, I hacked it together. This is only for white, suit to your needs:

    function animate_bg(ele, from, to) {
        ele.css("background-color", "rgba(255, 255, 255, " + (from += from > to ? -1 : 1) / 10 + ")"); 
        if(from != to)  
            setTimeout(function() { animate_bg(ele, from, to) }, 20);
    }
    

    Usage:

    $("a").hover(
        function() {return animate_bg($(this), 0, 10)},
        function() {return animate_bg($(this), 10, 0)}
    );
    

    0 讨论(0)
  • 2020-12-09 15:21

    I used the answer of Linus but ran into IE. Changed it about a bit to work in IE as well:

    function animate_bg(ele, from, to) {
        from += from > to ? -1 : 1;
        if(!$.support.opacity){
            if(from != to){
                var opStr = (Math.round(from * 25.5)).toString(16);
                //alert(opStr)
                ele.css({background:'transparent',filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#" + opStr + "FFFF00, endColorstr=#" + opStr + "FFFF00)"});   
            }else{
                ele.css({background:'transparent',filter:"none"});   
            }
        }else{
            ele.css("backgroundColor", "rgba(255, 255, 0, " + (from) / 10 + ")"); 
        }
    
        if(from != to)  
            setTimeout(function() { animate_bg(ele, from, to) }, 50);
    }
    

    Usage is the same:

    $("a").hover(
        function() {return animate_bg($(this), 0, 10)},
        function() {return animate_bg($(this), 10, 0)}
    );
    
    0 讨论(0)
提交回复
热议问题