js 动画

来源:互联网 发布:java web服务开发 pdf 编辑:程序博客网 时间:2024/05/15 11:24

自定义动画

如果上述动画效果还不能满足你的要求,那就祭出最后大招:animate(),它可以实现任意动画效果,我们需要传入的参数就是DOM元素最终的CSS状态和时间,jQuery在时间段内不断调整CSS直到达到我们设定的值:

var div = $('#test-animate');div.animate({    opacity: 0.25,    width: '256px',    height: '256px'}, 3000); //3秒钟内CSS过渡到设定值

animate()还可以再传入一个函数,当动画结束时,该函数将被调用:

var div = $('#test-animate');div.animate({    opacity: 0.25,    width: '256px',    height: '256px'}, 3000, function () {    console.log('动画已结束');    // 恢复至初始状态:    $(this).css('opacity', '1.0').css('width', '128px').css('height', '128px');});

实际上这个回调函数参数对于基本动画也是适用的。

有了animate(),你就可以实现各种自定义动画效果了(仅展示):

串行动画

jQuery的动画效果还可以串行执行,通过delay()方法还可以实现暂停,这样,我们可以实现更复杂的动画效果,而代码却相当简单:

var div = $('#test-animates');// 动画效果:slideDown - 暂停 - 放大 - 暂停 - 缩小div.slideDown(2000)   .delay(1000)   .animate({       width: '256px',       height: '256px'   }, 2000)   .delay(1000)   .animate({       width: '128px',       height: '128px'   }, 2000);}</script>

因为动画需要执行一段时间,所以jQuery必须不断返回新的Promise对象才能后续执行操作。简单地把动画封装在函数中是不够的。

效果实测:(仅展示)

为什么有的动画没有效果

你可能会遇到,有的动画如slideUp()根本没有效果。这是因为jQuery动画的原理是逐渐改变CSS的值,如height100px逐渐变为0。但是很多不是block性质的DOM元素,对它们设置height根本就不起作用,所以动画也就没有效果。

此外,jQuery也没有实现对background-color的动画效果,用animate()设置background-color也没有效果。这种情况下可以使用CSS3的transition实现动画效果。

0 0