使用jQuery动画盒子阴影的正确方法


Answers:


78

直接回答

使用埃德温·马丁的jQuery插件影子动画,它扩展了.animate方法,你可以简单地使用正常的语法与“boxShadow”和的每一个方面-颜色,在x轴和y偏移时,模糊半径传播半径-变得活跃起来。它包括多个阴影支持。

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

改用CSS动画

jQuery通过更改styleDOM元素的属性来进行动画处理,这可能会引起特殊性的意外并将样式信息移出样式表。

我找不到CSS阴影动画的浏览器支持统计信息,但是您可能会考虑使用jQuery来应用基于动画的类,而不是直接处理动画。例如,您可以在样式表中定义一个盒子阴影动画:

@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代码中所做的操作同步:

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

1
我同意,接受的答案最近没有更新。这个插件对我来说很好用。
barro32 2012年

我似乎无法使用jQuery 1.9在没有错误的情况下使其正常工作,其他人是否遇到过此问题?
Skami 2013年

鉴于它只问世了,一周前(?),他可能还没有更新。通读jQ1.9升级指南阴影动画插件的源代码,并查看在紧急情况下需要重做的方法。
iono

我使用了您链接的档案文件,而不是他的插件的最新版本,它可以完美地工作。这样就解决了我的问题,谢谢您的快速答复。
Skami 2013年

1
我昨天尝试了未缩小版本和缩小版本,都给了我同样的错误。我很高兴它现在可以正常工作,只是希望我不会遇到1.8中解决的任何问题。我也希望Edwin将继续开发此插件,因为它似乎是在那里使用最少麻烦的版本。
Skami 2013年

30

如果您使用的是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/


cssHooks是1.4.3的一部分还是插件?如果您有jQuery文档,我希望提供它们的链接,这听起来很有趣。
超现实主义之梦

@Surreal部分1.4.3。关于cssHooks的文献还没有很多,但是您可以深入研究它并进行检查:github.com/jquery/jquery/blob/master/src/css.js 布兰登·阿隆(Brandon Arron)一直在大量研究cssHooks:github.com/brandonaaron/jquery-cssHooks
PetersenDidIt,

@Blowsie可能是boxshadow cssHook的问题。可能与此问题相同:github.com/brandonaaron/jquery-cssHooks/issues/32
PetersenDidIt

这似乎不支持插入框阴影,还是我误会了?
亚当·弗雷泽

@AdamFraser为我工作(在Chrome中测试)jsfiddle.net/petersendidit/w5aAn/474
PetersenDidIt,

15

如果您不想使用插件,可以使用一些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动画的完整文档,请从这里开始巫术之路


确实不错。不知何故,这并不会消耗我运行动画的大部分处理器。我认为,但是我不确定,这是由于我在关键帧中使用了两个百分比范围(0%,50%和100%)。
jozi

3

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

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

0

这是不使用插件的情况下的示例:jQuery动画盒 但是它没有使用插件附带的额外功能,但是我个人很想看到(并理解)疯狂背后的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.