本文共 4569 字,大约阅读时间需要 15 分钟。
animate(参数对象,time,回调函数)
同时改变多个样式。
$(":button").click(function(){ $("div").animate({ 'width':"300px", 'height':"300px", 'opacity':0.5, 'font-size':'50px' });});
添加速度和回调函数
$(":button").click(function(){ $("div").animate({ 'width':"300px", 'height':"300px", 'opacity':0.5, 'font-size':'50px' },200,function(){ alert("动画完成"); });});
移动动画。需要将div的样式设置成position:absolte,然后在改变left和top的值即可:
$(":button").click(function(){ $("div").animate({ left:'100px', top:'100px' });});
位置的自增自减。位置的改变可以自增自减(+=,-=)
$(":button").click(function(){ $("div").animate({ left:'+=100px', top:'-=100px' });});
有两种速度
- swing 缓动(先快后慢) - linear 匀速$(".a").animate({ left:"500px"},2000,'swing');$(".b").animate({ left:"500px"},2000,'linear');
嵌套调用回调函数,可以实现队列动画,但是比较繁琐
$(":input").click(function(){ $("div").animate({width:"300px"},function(){ $("div").animate({height:"300px"},function(){ $("div").animate({height:"300px"},function(){ $("div").animate({fontSize:"50px"}); }) }); }); });
jQuery支持链式调用。因此可以链式的改变多个样式
$(":input").click(function(){ $("div").animate({width:"300px"}) .animate({height:"300px"}) .animate({fontSize:"50px"});});
将动画分解,并列的依次调用
$(":input").click(function(){ $("div").animate({width:"300px"}); $("div").animate({height:"300px"}); $("div").animate({fontSize:"50px"});});
以上方法对于单个元素的样式可以实现列队动画。但是如果同时控制几个元素时,不同的元素同时开始执行。但是执行时是按照队列依次执行自身的动画,如果需要不同的元素之间队列执行,就必须嵌套回调函数
$(":input").click(function(){ $(".a").animate({width:"300px"}); $(".a").animate({height:"300px"}); $(".a").animate({fontSize:"50px"}); $(".b").animate({width:"300px"}); $(".b").animate({height:"300px"}); $(".b").animate({fontSize:"50px"});});
如果在一连串的动画后调用改变样式的函数。那么会先改变css样式,后执行动画。
$(":input").click(function(){ $(".a").animate({width:"300px"}).animate({height:"300px"}).css("background-color","skyblue" );});
解决的方法是使用queue函数,该函数会让动画先执行:
$(":input").click(function(){ $(".a").animate({width:"300px"}).animate({height:"300px"}).queue(function(){ $(".a").css("background-color","skyblue" ); });});
但是,这是如果在queue后再接着调用其他动画时会失效,解决方法是在queue函数的末尾调用next(),同时在queue的匿名函数入口传入next
queue(function(next){… next()});$(":input").click(function(){ $(".a").animate({width:"300px"}); $(".a").animate({height:"300px"}).queue(function(next){ $(".a").css("background-color","skyblue"); next(); }).animate({width:"800px"});});
较老的版本使用dequeue函数达到同样的效果:
$(":input").click(function(){ $(".a").animate({width:"300px"}); $(".a").animate({height:"300px"}).queue(function(next){ $(".a").css("background-color","skyblue"); $(this).dequeue(); }).animate({width:"800px"});});
queue还可以得到当前动画的长度
清理之后没有开始的动画,并且,clearQueue() 方法移除任何排队的函数。
$(":input").click(function(){ $(".a").animate({width:"300px"},2000); $(".a").animate({height:"300px"},2000); $(".a").animate({fontSize:"50px"},2000); $(".a").queue(function(next){ $(".a").css("background-color","skyblue"); $(this).dequeue(); }).animate({width:"800px"});});$(":input:eq(1)").click(function(){ $(".a").clearQueue();});
stop(clearQueue,gotoEnd)
- clearQueue 停止,并清空后面未执行完的动画。默认为 false (true/false) - gotoEnd 停止后,当前动画执行完毕的位置,默认为 false (true/false)默认地,如果有列队动画,stop停止第一个列队动画,而继续执行后面的动画。
$(":button:eq(0)").click(function(){ $(".a").animate({ left:"500px" },1000); $(".a").animate({ top:"500px" },1000); $(".a").animate({ width:"500px" },1000);});$(":button:eq(1)").click(function(){ $(".a").stop(true,true);});
事件延迟一定的时间
delay(time)$(":button:eq(0)").click(function(){ $(".a").animate({ left:"500px" }); $(".a").animate({ top:"500px" }); $(".a").delay(1000); $(".a").animate({ width:"500px" });});
之前说过的一个过滤器,可以选择正在执行动画的元素
一个永不停止的动画:
$(".a").slideToggle(function(){ $(".a").slideToggle(arguments.callee);});
使用过滤器:
$(":button").click(function(){ $(":animated").css("backgroundColor","blue");});
全局的动画属性:
- .fx.interval动画执行的帧数(num)−.fx.off 关闭动画(true/false)$.fx.interval = 100; 设置帧数为100 ,动画变得卡顿$.fx.off = true; 取消所有动画