Correct way to animate box-shadow with jQuery

后端 未结 5 1438
遥遥无期
遥遥无期 2020-11-27 04:09

Which is the correct syntax to animate the box-shadow property with jQuery?

$().animate({?:\"0 0 5px #666\"});
5条回答
  •  甜味超标
    2020-11-27 04:29

    Direct answer

    Using Edwin Martin's jQuery plugin for shadow animation, which extends the .animate method, you can simply use the normal syntax with "boxShadow" and every facet of that - color, the x- and y-offset, the blur-radius and spread-radius - gets animated. It includes multiple shadow support.

    $(element).animate({ 
      boxShadow: "0px 0px 5px 3px hsla(100, 70%, 60%, 0.8)"
    }); 
    

    Using CSS animations instead

    jQuery animates by changing the style property of DOM elements, which can cause surprises with specificity and moves style information out of your stylesheets.

    I can't find browser support stats for CSS shadow animation, but you might consider using jQuery to apply an animation-based class instead of handling the animation directly. For example, you can define a box-shadow animation in your stylesheet:

    @keyframes shadowPulse {
        0% {
            box-shadow: 0px 0px 10px 0px hsla(0, 0%, 0%, 1);
        }
    
        100% {
            box-shadow: 0px 0px 5px 0px hsla(0, 0%, 0%, 0);
        }
    }
    
    .shadow-pulse {
        animation-name: shadowPulse;
        animation-duration: 1.5s;
        animation-iteration-count: 1;
        animation-timing-function: linear;
    }
    

    You can then use the native animationend event to synchronise the end of the animation with what you were doing in your JS code:

    $(element).addClass('shadow-pulse');
    $(element).on('animationend', function(){    
        $(element).removeClass('shadow-pulse');
        // do something else...
    });
    

提交回复
热议问题