正确的方法来动画box-shadow与jQuery

hmae6n7t  于 2023-06-22  发布在  jQuery
关注(0)|答案(5)|浏览(149)

使用jQuery动画box-shadow属性的正确语法是什么?

$().animate({?:"0 0 5px #666"});
c86crjj0

c86crjj01#

直接回答

使用Edwin Martin的**jQuery plugin for shadow animation**,它扩展了.animate方法,您可以简单地使用“boxShadow”的正常语法,并且该- * 颜色 *,*x-和y-偏移 *,blur-radiusspread-radius 的每个方面都将被动画化。它支持多个阴影。

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

使用CSS动画

jQuery通过更改DOM元素的style属性来进行动画,这可能会导致特殊性的惊喜,并将样式信息移出样式表。
我找不到CSS阴影动画的浏览器支持统计,但你可以考虑使用JS应用一个基于动画的 * 类 *,而不是直接处理动画。例如,您可以在样式表中定义框阴影动画:

@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;
}

然后,您可以使用本机animationend事件来同步动画的结束与您在JS代码中所做的事情:

Vanilla JS:
element.classList.add('shadow-pulse')
element.addEventListener('animationend', event => {  
    element.classList.remove('shadow-pulse')
    // do something else...
})
jQuery:
$(element).addClass('shadow-pulse')
$(element).on('animationend', function(){    
    $(element).removeClass('shadow-pulse')
    // do something else...
})
kxeu7u2r

kxeu7u2r2#

如果您使用的是jQuery 1.4.3+,那么您可以利用添加的cssHooks代码。
使用boxShadow钩子:https://github.com/brandonaaron/jquery-cssHooks/blob/master/boxshadow.js
你可以这样做:

$('#box').animate({
    'boxShadowX': '10px',
    'boxShadowY':'10px',
    'boxShadowBlur': '20px'
});

这个钩子还不能让你对颜色进行动画处理,但是我确信可以添加一些工作。
示例:http://jsfiddle.net/petersendidit/w5aAn/

iyr7buue

iyr7buue3#

如果你不想使用插件,可以用一点CSS来完成:

#my-div{    
  background-color: gray;
  animation: shadowThrob 0.9s infinite;
  animation-direction: alternate;
  -webkit-animation: shadowThrob 0.9s ease-out infinite;
  -webkit-animation-direction: alternate;
}
@keyframes shadowThrob {
  from {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.9);}
  to {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.2);}
}
@-webkit-keyframes shadowThrob {
  from {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.9);}
  to {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.2);}
}
/*NOTE: The animation property is not supported in Internet Explorer 9 and earlier versions.*/

查看详情:http://jsfiddle.net/Z8E5U/
如果你想要CSS动画的完整文档,你的向导begins here..

okxuctiv

okxuctiv4#

我喜欢ShaneSauce解决方案!使用一个类代替一个ID,你可以使用jQuery addClass/delay/removeClass添加/删除任何元素的效果:

$('.error').each( function(idx, el){
    $( el )
        .addClass( 'highlight' )
        .delay( 2000 )
        .removeClass( 'highlight' );
});
olmpazwi

olmpazwi5#

下面是一个不使用插件的例子:jQuery animated Box但它没有使用插件所带来的额外功能,但我个人喜欢看到(并理解)疯狂背后的方法。

相关问题